91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2023-03-09 14:42:43 來源:億速云 閱讀:98 作者:iii 欄目:MySQL數據庫

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

介紹:

無論您是創建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優化面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

甘洛县| 仙居县| 永年县| 蒙阴县| 周口市| 余江县| 吴桥县| 台东县| 谷城县| 顺平县| 景洪市| 诏安县| 荔浦县| 九龙城区| 武夷山市| 务川| 平山县| 江安县| 克拉玛依市| 阿鲁科尔沁旗| 扶风县| 镇宁| 景东| 新竹市| 旬邑县| 天柱县| 通城县| 利辛县| 枣强县| 台南县| 南召县| 呼和浩特市| 廊坊市| 广宁县| 丽水市| 隆德县| 长葛市| 榆中县| 泰和县| 六盘水市| 依安县|