溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

常見的SQL優(yōu)化面試題有哪些

發(fā)布時(shí)間:2023-03-09 14:42:43 來源:億速云 閱讀:89 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“常見的SQL優(yōu)化面試題有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

介紹:

無論您是創(chuàng)建Web應(yīng)用程序的開發(fā)人員,還是參與Web測(cè)試的DBA或測(cè)試人員,SQL方面的技巧在數(shù)據(jù)庫編程和數(shù)據(jù)庫驗(yàn)證中都非常重要。因此,我們整理了QL性能優(yōu)化方面的面試問題。

SQL性能優(yōu)化是一項(xiàng)艱巨的任務(wù),并且是處理Web應(yīng)用程序日益增加的負(fù)載的關(guān)鍵。

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

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

問:比如,現(xiàn)在有個(gè)面試官說,現(xiàn)在線上有個(gè)SQL執(zhí)行很慢,你怎么優(yōu)化?

這種時(shí)候最好分幾步回答,不要一上來就說,該怎么怎么寫SQL,面試時(shí)要學(xué)會(huì),跳出來,看全貌,裝進(jìn)去,看本質(zhì)。

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

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

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

  • 鎖等待
    InnoDB 存儲(chǔ)引擎支持行鎖和表鎖,我們要注意行鎖升級(jí)為表鎖的可能。在批量更新操作時(shí),行鎖就很可能會(huì)升級(jí)為表鎖。MySQL 認(rèn)為如果對(duì)一張表使用大量行鎖,會(huì)導(dǎo)致事務(wù)執(zhí)行效率下降,從而可能造成其它事務(wù)長時(shí)間鎖等待和更多的鎖沖突問題發(fā)生,致使性能嚴(yán)重下降,所以 MySQL 會(huì)將行鎖升級(jí)為表鎖。還有,行鎖是基于索引加的鎖,如果我們?cè)诟虏僮鲿r(shí),條件索引失效,那么行鎖也會(huì)升級(jí)為表鎖。除了鎖升級(jí)之外,行鎖相對(duì)表鎖來說,雖然粒度更細(xì),并發(fā)能力提升了,但也帶來了新的問題,那就是死鎖。

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

上面我說了一些關(guān)于SQL執(zhí)行慢的原因,下面就該看看怎么分析這些SQL了

  • 找出慢SQL
    開啟慢查詢,慢查詢是分析SQL執(zhí)行慢的常見手段,主要有這幾個(gè)參數(shù),slow_query_log:慢查詢開啟狀態(tài),slow_query_log_file:慢查詢?nèi)罩敬娣诺奈恢茫ㄟ@個(gè)目錄需要MySQL的運(yùn)行帳號(hào)的可寫權(quán)限,一般設(shè)置為MySQL的數(shù)據(jù)存放目錄),long_query_time:查詢超過多少秒才記錄。

  • 通過 EXPLAIN 分析 SQL 執(zhí)行計(jì)劃

  • 通過 Show Profile 分析 SQL 執(zhí)行性能

問:平時(shí)寫SQL時(shí)該注意什么?有什么經(jīng)驗(yàn)可談?

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

  • 統(tǒng)計(jì)時(shí)盡量使用count(*),count(*)&asymp;count(1),大于count(主鍵)。

  • 如果明確查找一條語句,請(qǐng)使用limit 1;,因?yàn)檎业揭粭l符合條件的記錄后就不會(huì)繼續(xù)查找了。

  • 優(yōu)化分頁查詢

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

  • 盡量使用 MySQL 5.6以后的版本

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

問:1. 什么是SQL查詢優(yōu)化?

答: 查詢優(yōu)化是一種以某種方式編寫查詢以便可以快速執(zhí)行的過程。對(duì)于任何標(biāo)準(zhǔn)應(yīng)用而言,這都是重要的一步。

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

答: 優(yōu)化SQL查詢可以對(duì)性能帶來實(shí)質(zhì)性的積極影響。它還取決于您所擁有的RDBMS知識(shí)水平?,F(xiàn)在讓我們看一下調(diào)整SQL查詢的一些技巧。

1.盡量不要編寫冗長的查詢,使用視圖和存儲(chǔ)過程,它有助于最大程度地減少網(wǎng)絡(luò)負(fù)載。

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

3.使用表級(jí)變量而不是臨時(shí)表。

4. UNION ALL子句的響應(yīng)速度比UNION快。它不會(huì)查找重復(fù)的行,而UNION語句會(huì)查找重復(fù)的行,無論它們是否存在。

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

6.避免過多使用SQL游標(biāo)。

7.構(gòu)建存儲(chǔ)過程時(shí),請(qǐng)使用SET NOCOUNT ON子句。它表示受T-SQL語句影響的行。這將導(dǎo)致網(wǎng)絡(luò)流量減少。

8.優(yōu)良作法是返回所需的列而不是表的所有列。

9.最好不要使用復(fù)雜的Join,并避免不當(dāng)?shù)厥褂糜|發(fā)器。

10.創(chuàng)建表索引并遵守標(biāo)準(zhǔn)

問:有哪些影響數(shù)據(jù)庫性能的瓶頸?

答: 在Web應(yīng)用程序中,數(shù)據(jù)庫層可能被證明是實(shí)現(xiàn)最后一英里可擴(kuò)展性的關(guān)鍵瓶頸。如果數(shù)據(jù)庫存在性能泄漏,則可能成為瓶頸,并可能導(dǎo)致問題。一些常見的性能問題如下。

1. CPU使用率異常是最明顯的性能瓶頸。但是,您可以通過擴(kuò)容CPU或替換為高級(jí)CPU來修復(fù)它。它可能看起來像是一個(gè)簡(jiǎn)單的問題,但異常的CPU使用率可能導(dǎo)致其他問題。

2.內(nèi)存不足是下一個(gè)最常見的瓶頸。如果服務(wù)器無法管理峰值負(fù)載,那么它將對(duì)性能造成很大的問號(hào)。對(duì)于任何應(yīng)用程序來說,執(zhí)行內(nèi)存都是至關(guān)重要的,因?yàn)樗瘸志眯詢?nèi)存要快。同樣,當(dāng)RAM下降到特定閾值時(shí),操作系統(tǒng)將轉(zhuǎn)向使用交換內(nèi)存。但這會(huì)使應(yīng)用程序運(yùn)行非常緩慢。

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

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

在這種情況下,您需要進(jìn)行擴(kuò)容,用更快的驅(qū)動(dòng)器替換現(xiàn)有驅(qū)動(dòng)器。嘗試升級(jí)到SSD硬盤驅(qū)動(dòng)器或類似產(chǎn)品。

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

答:

  • 發(fā)現(xiàn)&ndash;首先,找出需要改進(jìn)的地方。探索諸如探查器,查詢執(zhí)行計(jì)劃,SQL調(diào)優(yōu)顧問,動(dòng)態(tài)視圖和自定義存儲(chǔ)過程之類的工具。

  • 審核&ndash;集中討論可用數(shù)據(jù)以隔離主要問題。

  • 提議&ndash;這是一種可以提高性能的標(biāo)準(zhǔn)方法。但是,您可以對(duì)其進(jìn)行進(jìn)一步自定義以最大程度地受益。

1.識(shí)別字段并創(chuàng)建索引。

2.修改大型查詢以使用創(chuàng)建的索引。

3.刷新表和視圖并更新統(tǒng)計(jì)信息。

4.重置現(xiàn)有索引并刪除未使用的索引。

5.查找并清除死塊。

驗(yàn)證&ndash;測(cè)試SQL性能調(diào)整方法。定期監(jiān)視進(jìn)度。另外,跟蹤是否對(duì)應(yīng)用程序的其他部分有不利影響。

發(fā)布&ndash;現(xiàn)在,是時(shí)候與團(tuán)隊(duì)中的每個(gè)人共享工作解決方案了。讓他們知道所有最佳做法,以便他們可以輕松使用它。問:什么是執(zhí)行計(jì)劃(explain plan)?

答: 這是SQL中使用的術(shù)語,它顯示其優(yōu)化程序計(jì)劃用于執(zhí)行SELECT / UPDATE / INSERT / DELETE語句的執(zhí)行計(jì)劃。

問:您如何分析執(zhí)行計(jì)劃?

答: 在分析說明計(jì)劃時(shí),請(qǐng)檢查以下區(qū)域。

1.驅(qū)動(dòng)表

2.聯(lián)接順序

3.聯(lián)接方法

4.意外的笛卡爾積

5.嵌套循環(huán),合并排序和哈希聯(lián)接

6.全表掃描

7.未使用的索引

8.訪問路徑

問:您如何使用執(zhí)行計(jì)劃調(diào)整查詢?

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

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

答: Summary advisor是用于過濾和實(shí)例化視圖的工具。通過為給定的工作負(fù)載選擇適當(dāng)?shù)膶?shí)例化視圖集,它可以幫助提高SQL性能。它還提供有關(guān)實(shí)例化視圖建議的數(shù)據(jù)。

問:是什么最有可能導(dǎo)致SQL查詢運(yùn)行慢至5分鐘?

答: 很有可能,特定表中數(shù)據(jù)量的突然增加可能會(huì)減慢SQL查詢的輸出。因此,收集目標(biāo)表的必要統(tǒng)計(jì)信息。另外,監(jiān)視數(shù)據(jù)庫級(jí)別或基礎(chǔ)對(duì)象級(jí)別的任何更改。

問:什么是Latch Free Event?何時(shí)發(fā)生?系統(tǒng)如何處理?

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

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

問:什么是主動(dòng)調(diào)整和被動(dòng)調(diào)整?

答:

主動(dòng)調(diào)整&ndash;架構(gòu)師或DBA確定在設(shè)計(jì)和開發(fā)過程中哪些系統(tǒng)資源和可用的Oracle功能組合滿足標(biāo)準(zhǔn)。

反應(yīng)式調(diào)整&ndash;這是發(fā)現(xiàn)和消除瓶頸的自下而上的方法。目的是使Oracle響應(yīng)更快。

問: 什么是基于規(guī)則的優(yōu)化器和基于成本的優(yōu)化器?

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

基于規(guī)則的優(yōu)化器&ndash;如果服務(wù)器沒有內(nèi)部統(tǒng)計(jì)信息支持該語句引用的對(duì)象,則RBO方法將獲得優(yōu)先級(jí)。但是,Oracle將在以后的版本中棄用此方法。

基于成本的優(yōu)化器&ndash;內(nèi)部統(tǒng)計(jì)數(shù)據(jù)很多時(shí),CBO將獲得優(yōu)先權(quán)。它驗(yàn)證幾種可能的執(zhí)行計(jì)劃,并根據(jù)系統(tǒng)資源選擇成本最低的計(jì)劃。

問: Oracle中有哪些SQL性能調(diào)優(yōu)增強(qiáng)功能?

答: Oracle提供了許多性能增強(qiáng)功能,其中包括:

1.自動(dòng)性能診斷和調(diào)優(yōu)功能

2.自動(dòng)共享內(nèi)存管理&ndash;它使Oracle可以控制SGA中的內(nèi)存分配。

3.等待模型的改進(jìn)&ndash;已經(jīng)有了許多視圖來增強(qiáng)等待模型。

4.自動(dòng)優(yōu)化器統(tǒng)計(jì)信息收集&ndash;使用稱為GATHER_STATS_JOB的計(jì)劃作業(yè)收集優(yōu)化器統(tǒng)計(jì)信息。

5.動(dòng)態(tài)采樣&ndash;使服務(wù)器能夠增強(qiáng)性能。

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

7.基于規(guī)則的優(yōu)化器過時(shí)-不再使用。

8.跟蹤增強(qiáng)功能&ndash;端到端跟蹤,該跟蹤允許通過客戶端標(biāo)識(shí)符而不是使用典型的會(huì)話ID來識(shí)別客戶端進(jìn)程。

1、Mysql 查詢是否區(qū)分大小寫?

  • 不區(qū)分

  • SELECT VERSION(), CURRENT_DATE;

  • SeLect version(), current_date;

  • seleCt vErSiOn(), current_DATE;

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

2、Mysql 的技術(shù)特點(diǎn)是什么?

  • Mysql 數(shù)據(jù)庫軟件是一個(gè)客戶端或服務(wù)器系統(tǒng),其中包括:支持各種客戶端程序和庫的多

  • 線程 SQL 服務(wù)器、不同的后端、廣泛的應(yīng)用程序編程接口和管理工具。

3、Heap 表是什么?

  • HEAP 表存在于內(nèi)存中,用于臨時(shí)高速存儲(chǔ)。

  • BLOB 或 TEXT 字段是不允許的

  • 只能使用比較運(yùn)算符=,<,>,=>,= <

  • HEAP 表不支持 AUTO_INCREMENT

  • 索引不可為 NULL

4、Mysql 服務(wù)器默認(rèn)端口是什么?

  • Mysql 服務(wù)器的默認(rèn)端口是 3306。

5、與 Oracle 相比,Mysql 有什么優(yōu)勢(shì)?

  • Mysql 是開源軟件,隨時(shí)可用,無需付費(fèi)。

  • Mysql 是便攜式的

  • 帶有命令提示符的 GUI。

  • 使用 Mysql 查詢?yōu)g覽器支持管理

6、如何區(qū)分 FLOAT 和 DOUBLE?

  • 以下是 FLOAT 和 DOUBLE 的區(qū)別:

  • 浮點(diǎn)數(shù)以 8 位精度存儲(chǔ)在 FLOAT 中,并且有四個(gè)字節(jié)。

  • 浮點(diǎn)數(shù)存儲(chǔ)在 DOUBLE 中,精度為 18 位,有八個(gè)字節(jié)。

7、區(qū)分 CHAR_LENGTH 和 LENGTH?

  • CHAR_LENGTH 是字符數(shù),而 LENGTH 是字節(jié)數(shù)。Latin 字符的這兩個(gè)數(shù)據(jù)是相同的,但是對(duì)

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

8、請(qǐng)簡(jiǎn)潔描述 Mysql 中 InnoDB 支持的四種事務(wù)隔離級(jí)別名稱,以及逐級(jí)之間的區(qū)別?

  • SQL 標(biāo)準(zhǔn)定義的四個(gè)隔離級(jí)別為:

  • read uncommited :讀到未提交數(shù)據(jù)

  • read committed:臟讀,不可重復(fù)讀

  • repeatable read:可重讀

  • serializable :串行事物

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

  • ENUM 是一個(gè)字符串對(duì)象,用于指定一組預(yù)定義的值,并可在創(chuàng)建表時(shí)使用。

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

10、如何定義 REGEXP?

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

11、CHAR 和 VARCHAR 的區(qū)別?

  • 以下是 CHAR 和 VARCHAR 的區(qū)別:

  • CHAR 和 VARCHAR 類型在存儲(chǔ)和檢索方面有所不同

  • CHAR 列長度固定為創(chuàng)建表時(shí)聲明的長度,長度值范圍是 1 到 255

  • 當(dāng) CHAR 值被存儲(chǔ)時(shí),它們被用空格填充到特定長度,檢索 CHAR 值時(shí)需刪除尾隨空格。

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

字符串類型是:

  • SET

  • BLOB

  • ENUM

  • CHAR

  • TEXT

  • VARCHAR

13、如何獲取當(dāng)前的 Mysql 版本?

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

14、Mysql 中使用什么存儲(chǔ)引擎?

存儲(chǔ)引擎稱為表類型,數(shù)據(jù)使用各種技術(shù)存儲(chǔ)在文件中。

技術(shù)涉及:

  • Storage mechanism

  • Locking levels

  • Indexing

  • Capabilities and functions.

15、Mysql 驅(qū)動(dòng)程序是什么?

以下是 Mysql 中可用的驅(qū)動(dòng)程序:

  • PHP 驅(qū)動(dòng)程序

  • JDBC 驅(qū)動(dòng)程序

  • ODBC 驅(qū)動(dòng)程序

  • CWRAPPER

  • PYTHON 驅(qū)動(dòng)程序

  • PERL 驅(qū)動(dòng)程序

  • RUBY 驅(qū)動(dòng)程序

  • CAP11PHP 驅(qū)動(dòng)程序

  • Ado.net5.mxj

16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數(shù)據(jù)類型上做什么?

  • 創(chuàng)建表時(shí) TIMESTAMP 列用 Zero 更新。只要表中的其他字段發(fā)生更改,UPDATE

  • CURRENT_TIMESTAMP 修飾符就將時(shí)間戳字段更新為當(dāng)前時(shí)間。

17、主鍵和候選鍵有什么區(qū)別?

  • 表格的每一行都由主鍵唯一標(biāo)識(shí),一個(gè)表只有一個(gè)主鍵。

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

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

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

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

19、 myisamchk 是用來做什么的?

它用來壓縮 MyISAM 表,這減少了磁盤或內(nèi)存使用。

20、ISAM 是什么?

ISAM 簡(jiǎn)稱為索引順序訪問方法。它是由 IBM 開發(fā)的,用于在磁帶等輔助存儲(chǔ)系統(tǒng)上存儲(chǔ)和

檢索數(shù)據(jù)。

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

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

22、MyISAM Static 和 MyISAM Dynamic 有什么區(qū)別?

在 MyISAM Static 上的所有字段有固定寬度。動(dòng)態(tài) MyISAM 表將具有像 TEXT,BLOB 等字

段,以適應(yīng)不同長度的數(shù)據(jù)類型。點(diǎn)擊這里有一套最全阿里面試題總結(jié)。

MyISAM Static 在受損情況下更容易恢復(fù)。

23、federated 表是什么?

federated 表,允許訪問位于其他服務(wù)器數(shù)據(jù)庫上的表。

24、如果一個(gè)表有一列定義為 TIMESTAMP,將發(fā)生什么?

每當(dāng)行被更改時(shí),時(shí)間戳字段將獲取當(dāng)前時(shí)間戳。

25、列設(shè)置為 AUTO INCREMENT 時(shí),如果在表中達(dá)到最大值,會(huì)發(fā)生什么情況?

它會(huì)停止遞增,任何進(jìn)一步的插入都將產(chǎn)生錯(cuò)誤,因?yàn)槊荑€已被使用。

26、怎樣才能找出最后一次插入時(shí)分配了哪個(gè)自動(dòng)增量?

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

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

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

SHOW INDEX FROM

28、MYSQL 數(shù)據(jù)表在什么情況下容易損壞?

服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞。

強(qiáng)制關(guān)機(jī),沒有先關(guān)閉 mysql 服務(wù)等。

29、mysql 有關(guān)權(quán)限的表都有哪幾個(gè)?

Mysql 服務(wù)器通過權(quán)限表來控制用戶對(duì)數(shù)據(jù)庫的訪問,權(quán)限表存放在 mysql 數(shù)據(jù)庫里,由

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

host。

30、Mysql 中有哪幾種鎖?

MyISAM 支持表鎖,InnoDB 支持表鎖和行鎖,默認(rèn)為行鎖

表級(jí)鎖:開銷小,加鎖快,不會(huì)出現(xiàn)死鎖。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)量

最低

行級(jí)鎖:開銷大,加鎖慢,會(huì)出現(xiàn)死鎖。鎖力度小,發(fā)生鎖沖突的概率小,并發(fā)度最高

“常見的SQL優(yōu)化面試題有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sql
AI