久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

常見的SQL優化面試題有哪些

145次閱讀
沒有評論

共計 7285 個字符,預計需要花費 19 分鐘才能閱讀完成。

本篇內容介紹了“常見的 SQL 優化面試題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

介紹:

無論您是創建 Web 應用程序的開發人員,還是參與 Web 測試的 DBA 或測試人員,SQL 方面的技巧在數據庫編程和數據庫驗證中都非常重要。因此,我們整理了 QL 性能優化方面的面試問題。

SQL 性能優化是一項艱巨的任務,并且是處理 Web 應用程序日益增加的負載的關鍵。

因此,我們有選擇地選擇了 SQL 性能優化方面的面試問題,這些問題可以使您充分了解 SQL 性能優化概念。

MySQL 基本是每個后臺面試者必問的問題,而 SQL 優化又是 MySQL 中重之又重的一塊了。如果你的 SQL 優化回答的好,有條理,那你入取的概率就大大提升了。

問:比如,現在有個面試官說,現在線上有個 SQL 執行很慢,你怎么優化?

這種時候最好分幾步回答,不要一上來就說,該怎么怎么寫 SQL,面試時要學會,跳出來,看全貌,裝進去,看本質。

問:慢 SQL 語句的幾種常見誘因?

在這個時候,就可以說,面試官,您好,我覺得 SQL 慢出現的原因可以分為以下幾種,切記,不要回答自己模糊不清的,沒法自圓其說的即使知道你也別回答,不然就是給自己挖坑。。。

無索引、索引失效導致慢查詢
如果表很大,而對 where 或者 order by 后面字段沒有建立索引,那這種情況查起來肯定很費力。但是有時候建立了索引,但在一些特定的場景下,索引還有可能會失效,所以索引失效也是導致慢查詢的主要原因之一。失效場景很多,比如模糊查詢白分號在前、查詢的字段使用了函數或者做了計算操作都有可能導致索引失效。

鎖等待
InnoDB 存儲引擎支持行鎖和表鎖,我們要注意行鎖升級為表鎖的可能。在批量更新操作時,行鎖就很可能會升級為表鎖。MySQL 認為如果對一張表使用大量行鎖,會導致事務執行效率下降,從而可能造成其它事務長時間鎖等待和更多的鎖沖突問題發生,致使性能嚴重下降,所以 MySQL 會將行鎖升級為表鎖。還有,行鎖是基于索引加的鎖,如果我們在更新操作時,條件索引失效,那么行鎖也會升級為表鎖。除了鎖升級之外,行鎖相對表鎖來說,雖然粒度更細,并發能力提升了,但也帶來了新的問題,那就是死鎖。

不恰當的 SQL 語句
使用不恰當的 SQL 語句也是慢 SQL 最常見的誘因之一。例如,習慣使用 SELECT,SELECT COUNT() SQL 語句,在大數據表中使用 LIMIT M,N 分頁查詢,以及對非索引字段進行排序等等。對于一些慢的 SQL,我該怎么分析?

上面我說了一些關于 SQL 執行慢的原因,下面就該看看怎么分析這些 SQL 了

找出慢 SQL
開啟慢查詢,慢查詢是分析 SQL 執行慢的常見手段,主要有這幾個參數,slow_query_log:慢查詢開啟狀態,slow_query_log_file:慢查詢日志存放的位置(這個目錄需要 MySQL 的運行帳號的可寫權限,一般設置為 MySQL 的數據存放目錄),long_query_time:查詢超過多少秒才記錄。

通過 EXPLAIN 分析 SQL 執行計劃

通過 Show Profile 分析 SQL 執行性能

問:平時寫 SQL 時該注意什么?有什么經驗可談?

到這里,如果面試官還在聽你回答,這時候,你可以適當提高一點語氣,說對于一些慢 SQL,有很大一部分是由于我們開發者寫 SQL 時不注意 SQL 優化導致的,那么我就說一下我知道的一些注意事項。。。(提高聲音分貝,以防面試官睡著,并敲重點,告訴面試官,我準備好了,哈哈哈。。。)

統計時盡量使用 count(*),count(*) asymp;count(1),大于 count(主鍵)。

如果明確查找一條語句,請使用 limit 1;,因為找到一條符合條件的記錄后就不會繼續查找了。

優化分頁查詢

避免 Select *
用到什么字段就具體寫什么字段,原因除了 select * 查詢所有字段會多出網絡傳輸開銷之外,還有更重要的一點是,select * 無法使用覆蓋索引。

盡量使用 MySQL 5.6 以后的版本

對于使用索引方面對索引字段做函數操作或者做運算操作,都不能使用上索引。
所以針對這一點,除了我們索引的字段不要加函數之外。還要注意一些隱式轉換,比如,交易日志表(tradelog),tradeid 的字段類型是 varchar(32),字段有索引,但是當你執行 select * from tradelog where tradeid=110717; 語句,你發現走的還是全索引掃描。這是因為它其實做了類型轉換,相當于這么執行 mysql select * from tradelog where CAST(tradid AS signed int) = 110717;。隱式字符編碼轉換
如果兩張表使用的編碼集不一致,比如一個是 utf8mb4,一個是 utf8,那么這兩個字段連接后,相當于做了一次 CONVERT(traideid USING utf8mb4), 這樣也用不了索引。其實字符集不同只是條件之一,連接過程中要求在被驅動表的索引字段上加函數操作,是直接導致對被驅動表做全表掃描的原因。

問:1. 什么是 SQL 查詢優化?

答:  查詢優化是一種以某種方式編寫查詢以便可以快速執行的過程。對于任何標準應用而言,這都是重要的一步。

問:有哪些技巧可以提高 SQL 查詢的性能?

答:  優化 SQL 查詢可以對性能帶來實質性的積極影響。它還取決于您所擁有的 RDBMS 知識水平。現在讓我們看一下調整 SQL 查詢的一些技巧。

1. 盡量不要編寫冗長的查詢,使用視圖和存儲過程,它有助于最大程度地減少網絡負載。

2. 最好引入約束而不是觸發器。它們比觸發器更有效,并且可以提高性能。

3. 使用表級變量而不是臨時表。

4. UNION ALL 子句的響應速度比 UNION 快。它不會查找重復的行,而 UNION 語句會查找重復的行,無論它們是否存在。

5. 防止使用 DISTINCT 和 HAVING 子句。

6. 避免過多使用 SQL 游標。

7. 構建存儲過程時,請使用 SET NOCOUNT ON 子句。它表示受 T -SQL 語句影響的行。這將導致網絡流量減少。

8. 優良作法是返回所需的列而不是表的所有列。

9. 最好不要使用復雜的 Join,并避免不當地使用觸發器。

10. 創建表索引并遵守標準

問:有哪些影響數據庫性能的瓶頸?

答:  在 Web 應用程序中,數據庫層可能被證明是實現最后一英里可擴展性的關鍵瓶頸。如果數據庫存在性能泄漏,則可能成為瓶頸,并可能導致問題。一些常見的性能問題如下。

1. CPU 使用率異常是最明顯的性能瓶頸。但是,您可以通過擴容 CPU 或替換為高級 CPU 來修復它。它可能看起來像是一個簡單的問題,但異常的 CPU 使用率可能導致其他問題。

2. 內存不足是下一個最常見的瓶頸。如果服務器無法管理峰值負載,那么它將對性能造成很大的問號。對于任何應用程序來說,執行內存都是至關重要的,因為它比持久性內存要快。同樣,當 RAM 下降到特定閾值時,操作系統將轉向使用交換內存。但這會使應用程序運行非常緩慢。

您可以通過擴容 RAM 來解決它,但是如果有內存泄漏,它將無法解決。在這種情況下,您需要分析應用程序,以識別其代碼中的潛在泄漏。

3. 對外部存儲設備(如 SATA 磁盤)的過度依賴也可能成為瓶頸。在將大量數據寫入磁盤時,其影響顯而易見。如果輸出操作非常慢,則很明顯表明問題已成為瓶頸。

在這種情況下,您需要進行擴容,用更快的驅動器替換現有驅動器。嘗試升級到 SSD 硬盤驅動器或類似產品。

問:改善 SQL 性能涉及哪些步驟?

答:

發現 ndash; 首先,找出需要改進的地方。探索諸如探查器,查詢執行計劃,SQL 調優顧問,動態視圖和自定義存儲過程之類的工具。

審核 ndash; 集中討論可用數據以隔離主要問題。

提議 ndash; 這是一種可以提高性能的標準方法。但是,您可以對其進行進一步自定義以最大程度地受益。

1. 識別字段并創建索引。

2. 修改大型查詢以使用創建的索引。

3. 刷新表和視圖并更新統計信息。

4. 重置現有索引并刪除未使用的索引。

5. 查找并清除死塊。

驗證 ndash; 測試 SQL 性能調整方法。定期監視進度。另外,跟蹤是否對應用程序的其他部分有不利影響。

發布 ndash; 現在,是時候與團隊中的每個人共享工作解決方案了。讓他們知道所有最佳做法,以便他們可以輕松使用它。問:什么是執行計劃(explain plan)?

答:  這是 SQL 中使用的術語,它顯示其優化程序計劃用于執行 SELECT / UPDATE / INSERT / DELETE 語句的執行計劃。

問:您如何分析執行計劃?

答:  在分析說明計劃時,請檢查以下區域。

1. 驅動表

2. 聯接順序

3. 聯接方法

4. 意外的笛卡爾積

5. 嵌套循環,合并排序和哈希聯接

6. 全表掃描

7. 未使用的索引

8. 訪問路徑

問:您如何使用執行計劃調整查詢?

答:  說明計劃顯示查詢成本的完整輸出,包括每個子查詢。成本與查詢執行時間成正比。該計劃還在從查詢中獲取數據的同時在查詢或子查詢中描述了問題。

問:什么是 Summary advisor,它提供什么類型的信息?

答: Summary advisor 是用于過濾和實例化視圖的工具。通過為給定的工作負載選擇適當的實例化視圖集,它可以幫助提高 SQL 性能。它還提供有關實例化視圖建議的數據。

問:是什么最有可能導致 SQL 查詢運行慢至 5 分鐘?

答:  很有可能,特定表中數據量的突然增加可能會減慢 SQL 查詢的輸出。因此,收集目標表的必要統計信息。另外,監視數據庫級別或基礎對象級別的任何更改。

問:什么是 Latch Free Event?何時發生?系統如何處理?

答:  在 Oracle 中,當會話需要鎖,試圖獲取它但由于其他人擁有它而失敗時,就會發生“Latch Free Event”等待事件。

因此,它等待著等待,等待鎖釋放,然后醒來并再次嘗,試鎖上沒有等待服務員的有序隊列,因此最先到達的人可以得到它。

問:什么是主動調整和被動調整?

答:

主動調整 ndash; 架構師或 DBA 確定在設計和開發過程中哪些系統資源和可用的 Oracle 功能組合滿足標準。

反應式調整 ndash; 這是發現和消除瓶頸的自下而上的方法。目的是使 Oracle 響應更快。

問:什么是基于規則的優化器和基于成本的優化器?

答: Oracle 確定如何獲取處理有效 SQL 語句所需的數據。它使用以下兩種方法之一來做出此決定。

基于規則的優化器 ndash; 如果服務器沒有內部統計信息支持該語句引用的對象,則 RBO 方法將獲得優先級。但是,Oracle 將在以后的版本中棄用此方法。

基于成本的優化器 ndash; 內部統計數據很多時,CBO 將獲得優先權。它驗證幾種可能的執行計劃,并根據系統資源選擇成本最低的計劃。

問:Oracle 中有哪些 SQL 性能調優增強功能?

答: Oracle 提供了許多性能增強功能,其中包括:

1. 自動性能診斷和調優功能

2. 自動共享內存管理 ndash; 它使 Oracle 可以控制 SGA 中的內存分配。

3. 等待模型的改進 ndash; 已經有了許多視圖來增強等待模型。

4. 自動優化器統計信息收集 ndash; 使用稱為 GATHER_STATS_JOB 的計劃作業收集優化器統計信息。

5. 動態采樣 ndash; 使服務器能夠增強性能。

6. CPU Costing ndash; 這是優化器(CPU + I / O)的基本成本模型,其成本單位為時間優化器通知的時間。

7. 基于規則的優化器過時 - 不再使用。

8. 跟蹤增強功能 ndash; 端到端跟蹤,該跟蹤允許通過客戶端標識符而不是使用典型的會話 ID 來識別客戶端進程。

1、Mysql 查詢是否區分大小寫?

不區分

SELECT VERSION(), CURRENT_DATE;

SeLect version(), current_date;

seleCt vErSiOn(), current_DATE;

所有這些例子都是一樣的,Mysql 不區分大小寫。

2、Mysql 的技術特點是什么?

Mysql 數據庫軟件是一個客戶端或服務器系統,其中包括:支持各種客戶端程序和庫的多

線程 SQL 服務器、不同的后端、廣泛的應用程序編程接口和管理工具。

3、Heap 表是什么?

HEAP 表存在于內存中,用于臨時高速存儲。

BLOB 或 TEXT 字段是不允許的

只能使用比較運算符 =,,,=,=

HEAP 表不支持 AUTO_INCREMENT

索引不可為 NULL

4、Mysql 服務器默認端口是什么?

Mysql 服務器的默認端口是 3306。

5、與 Oracle 相比,Mysql 有什么優勢?

Mysql 是開源軟件,隨時可用,無需付費。

Mysql 是便攜式的

帶有命令提示符的 GUI。

使用 Mysql 查詢瀏覽器支持管理

6、如何區分 FLOAT 和 DOUBLE?

以下是 FLOAT 和 DOUBLE 的區別:

浮點數以 8 位精度存儲在 FLOAT 中,并且有四個字節。

浮點數存儲在 DOUBLE 中,精度為 18 位,有八個字節。

7、區分 CHAR_LENGTH 和 LENGTH?

CHAR_LENGTH 是字符數,而 LENGTH 是字節數。Latin 字符的這兩個數據是相同的,但是對

于 Unicode 和其他編碼,它們是不同的。

8、請簡潔描述 Mysql 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?

SQL 標準定義的四個隔離級別為:

read uncommited:讀到未提交數據

read committed:臟讀,不可重復讀

repeatable read:可重讀

serializable:串行事物

9、在 Mysql 中 ENUM 的用法是什么?

ENUM 是一個字符串對象,用于指定一組預定義的值,并可在創建表時使用。

Create table size(name ENUM( Smail, lsquo;Medium rsquo;, lsquo;Large rsquo;);

10、如何定義 REGEXP?

REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。

11、CHAR 和 VARCHAR 的區別?

以下是 CHAR 和 VARCHAR 的區別:

CHAR 和 VARCHAR 類型在存儲和檢索方面有所不同

CHAR 列長度固定為創建表時聲明的長度,長度值范圍是 1 到 255

當 CHAR 值被存儲時,它們被用空格填充到特定長度,檢索 CHAR 值時需刪除尾隨空格。

12、列的字符串類型可以是什么?

字符串類型是:

SET

BLOB

ENUM

CHAR

TEXT

VARCHAR

13、如何獲取當前的 Mysql 版本?

SELECT VERSION(); 用于獲取當前 Mysql 的版本。

14、Mysql 中使用什么存儲引擎?

存儲引擎稱為表類型,數據使用各種技術存儲在文件中。

技術涉及:

Storage mechanism

Locking levels

Indexing

Capabilities and functions.

15、Mysql 驅動程序是什么?

以下是 Mysql 中可用的驅動程序:

PHP 驅動程序

JDBC 驅動程序

ODBC 驅動程序

CWRAPPER

PYTHON 驅動程序

PERL 驅動程序

RUBY 驅動程序

CAP11PHP 驅動程序

Ado.net5.mxj

16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上做什么?

創建表時 TIMESTAMP 列用 Zero 更新。只要表中的其他字段發生更改,UPDATE

CURRENT_TIMESTAMP 修飾符就將時間戳字段更新為當前時間。

17、主鍵和候選鍵有什么區別?

表格的每一行都由主鍵唯一標識, 一個表只有一個主鍵。

主鍵也是候選鍵。按照慣例,候選鍵可以被指定為主鍵,并且可以用于任何外鍵引用。

18、如何使用 Unix shell 登錄 Mysql?

我們可以通過以下命令登錄:

[mysql dir]/bin/mysql -h hostname -u

19、myisamchk 是用來做什么的?

它用來壓縮 MyISAM 表,這減少了磁盤或內存使用。

20、ISAM 是什么?

ISAM 簡稱為索引順序訪問方法。它是由 IBM 開發的,用于在磁帶等輔助存儲系統上存儲和

檢索數據。

21、如何控制 HEAP 表的最大尺寸?

Heal 表的大小可通過稱為 max_heap_table_size 的 Mysql 配置變量來控制。

22、MyISAM Static 和 MyISAM Dynamic 有什么區別?

在 MyISAM Static 上的所有字段有固定寬度。動態 MyISAM 表將具有像 TEXT,BLOB 等字

段,以適應不同長度的數據類型。點擊這里有一套最全阿里面試題總結。

MyISAM Static 在受損情況下更容易恢復。

23、federated 表是什么?

federated 表,允許訪問位于其他服務器數據庫上的表。

24、如果一個表有一列定義為 TIMESTAMP,將發生什么?

每當行被更改時,時間戳字段將獲取當前時間戳。

25、列設置為 AUTO INCREMENT 時,如果在表中達到最大值,會發生什么情況?

它會停止遞增,任何進一步的插入都將產生錯誤,因為密鑰已被使用。

26、怎樣才能找出最后一次插入時分配了哪個自動增量?

LAST_INSERT_ID 將返回由 Auto_increment 分配的最后一個值,并且不需要指定表名稱。

27、你怎么看到為表格定義的所有索引?

索引是通過以下方式為表格定義的:

SHOW INDEX FROM

28、MYSQL 數據表在什么情況下容易損壞?

服務器突然斷電導致數據文件損壞。

強制關機,沒有先關閉 mysql 服務等。

29、mysql 有關權限的表都有哪幾個?

Mysql 服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在 mysql 數據庫里,由

mysql_install_db 腳本初始化。這些權限表分別 user,db,table_priv,columns_priv 和

host。

30、Mysql 中有哪幾種鎖?

MyISAM 支持表鎖,InnoDB 支持表鎖和行鎖,默認為行鎖

表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖沖突的概率最高,并發量

最低

行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖沖突的概率小,并發度最高

“常見的 SQL 優化面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計7285字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 晋宁县| 边坝县| 蓝山县| 梁河县| 武宁县| 赤壁市| 旺苍县| 城固县| 鄂伦春自治旗| 威宁| 临西县| 满城县| 云梦县| 乌拉特前旗| 青州市| 克什克腾旗| 永昌县| 筠连县| 巴马| 寿光市| 邹平县| 锦屏县| 大厂| 神池县| 铁岭市| 会昌县| 萍乡市| 青岛市| 海门市| 睢宁县| 右玉县| 太湖县| 东海县| 东乡族自治县| 黎平县| 伊川县| 财经| 会泽县| 临江市| 邛崃市| 阳江市|