MySQL面試題 | 附答案解析(十七)

接上篇H雇帧E凶硅!

9. 主鍵使用自增ID還是UUID?

推薦使用自增ID蒸辆,不要使用UUID。

因?yàn)樵贗nnoDB存儲引擎中析既,主鍵索引是作為聚簇索引存在的躬贡,也就是說,主鍵索引的B+樹葉子節(jié)點(diǎn)上存儲了主鍵索引以及全部的數(shù)據(jù)(按照順序)眼坏,如果主鍵索引是自增ID拂玻,那么只需要不斷向后排列即可,如果是UUID宰译,由于到來的ID與原來的大小不確定檐蚜,會造成非常多的數(shù)據(jù)插入,數(shù)據(jù)移動沿侈,然后導(dǎo)致產(chǎn)生很多的內(nèi)存碎片闯第,進(jìn)而造成插入性能的下降。

總之缀拭,在數(shù)據(jù)量大一些的情況下咳短,用自增主鍵性能會好一些。

關(guān)于主鍵是聚簇索引蛛淋,如果沒有主鍵咙好,InnoDB會選擇一個(gè)唯一鍵來作為聚簇索引,如果沒有唯一鍵褐荷,會生成一個(gè)隱式的主鍵勾效。

10. 字段為什么要求定義為not null?

null值會占用更多的字節(jié)叛甫,且會在程序中造成很多與預(yù)期不符的情況葵第。

11. 如果要存儲用戶的密碼散列,應(yīng)該使用什么字段進(jìn)行存儲合溺?

密碼散列卒密,鹽,用戶身份證號等固定長度的字符串應(yīng)該使用char而不是varchar來存儲棠赛,這樣可以節(jié)省空間且提高檢索效率哮奇。

12. 優(yōu)化查詢過程中的數(shù)據(jù)訪問

(1)訪問數(shù)據(jù)太多導(dǎo)致查詢性能下降

(2)確定應(yīng)用程序是否在檢索大量超過需要的數(shù)據(jù)膛腐,可能是太多行或列

(3)確認(rèn)MySQL服務(wù)器是否在分析大量不必要的數(shù)據(jù)行

(4)避免犯如下SQL語句錯(cuò)誤

(5)查詢不需要的數(shù)據(jù)。解決辦法:使用limit解決

(6)多表關(guān)聯(lián)返回全部列鼎俘。解決辦法:指定列名

(7)總是返回全部列哲身。解決辦法:避免使用SELECT *

(8)重復(fù)查詢相同的數(shù)據(jù)。解決辦法:可以緩存數(shù)據(jù)贸伐,下次直接讀取緩存

(9)是否在掃描額外的記錄勘天。解決辦法:

(10)使用explain進(jìn)行分析,如果發(fā)現(xiàn)查詢需要掃描大量的數(shù)據(jù)捉邢,但只返回少數(shù)的行脯丝,可以通過如下技巧去優(yōu)化:

(11)使用索引覆蓋掃描,把所有的列都放到索引中伏伐,這樣存儲引擎不需要回表獲取對應(yīng)行就可以返回結(jié)果宠进。

(12)改變數(shù)據(jù)庫和表的結(jié)構(gòu),修改數(shù)據(jù)表范式

(13)重寫SQL語句藐翎,讓優(yōu)化器可以以更優(yōu)的方式執(zhí)行查詢材蹬。

13. 優(yōu)化長難的查詢語句

(1)一個(gè)復(fù)雜查詢還是多個(gè)簡單查詢

(2)MySQL內(nèi)部每秒能掃描內(nèi)存中上百萬行數(shù)據(jù),相比之下吝镣,響應(yīng)數(shù)據(jù)給客戶端就要慢得多

(3)使用盡可能小的查詢是好的堤器,但是有時(shí)將一個(gè)大的查詢分解為多個(gè)小的查詢是很有必要的。

(4)切分查詢

(5)將一個(gè)大的查詢分為多個(gè)小的相同的查詢

(6)一次性刪除1000萬的數(shù)據(jù)要比一次刪除1萬末贾,暫停一會的方案更加損耗服務(wù)器開銷吼旧。

(7)分解關(guān)聯(lián)查詢,讓緩存的效率更高未舟。

(8)執(zhí)行單個(gè)查詢可以減少鎖的競爭圈暗。

(9)在應(yīng)用層做關(guān)聯(lián)更容易對數(shù)據(jù)庫進(jìn)行拆分。

(10)查詢效率會有大幅提升裕膀。

(11)較少冗余記錄的查詢员串。

14. 優(yōu)化特定類型的查詢語句

(1)count(*)會忽略所有的列,直接統(tǒng)計(jì)所有列數(shù)昼扛,不要使用count(列名)

(2)MyISAM中寸齐,沒有任何where條件的count(*)非常快抄谐。

(3)當(dāng)有where條件時(shí)渺鹦,MyISAM的count統(tǒng)計(jì)不一定比其它引擎快。

(4)可以使用explain查詢近似值蛹含,用近似值替代count(*)

(5)增加匯總表

(6)使用緩存

15. 優(yōu)化關(guān)聯(lián)查詢

(1)確定ON或者USING子句中是否有索引毅厚。

(2)確保GROUP BY和ORDER BY只有一個(gè)表中的列,這樣MySQL才有可能使用索引浦箱。

16. 優(yōu)化子查詢

(1)用關(guān)聯(lián)查詢替代

(2)優(yōu)化GROUP BY和DISTINCT

(3)這兩種查詢據(jù)可以使用索引來優(yōu)化吸耿,是最有效的優(yōu)化方法

(4)關(guān)聯(lián)查詢中祠锣,使用標(biāo)識列分組的效率更高

(5)如果不需要ORDER BY,進(jìn)行GROUP BY時(shí)加ORDER BY NULL咽安,MySQL不會再進(jìn)行文件排序伴网。

(6)WITH ROLLUP超級聚合,可以挪到應(yīng)用程序處理

17. 優(yōu)化LIMIT分頁

(1)LIMIT偏移量大的時(shí)候妆棒,查詢效率較低

(2)可以記錄上次查詢的最大ID澡腾,下次查詢時(shí)直接根據(jù)該ID來查詢

18. 優(yōu)化UNION查詢

(1)UNION ALL的效率高于UNION

19. 優(yōu)化WHERE子句

解題方法

對于此類考題,先說明如何定位低效SQL語句糕珊,然后根據(jù)SQL語句可能低效的原因做排查动分,先從索引著手,如果索引沒有問題放接,考慮以上幾個(gè)方面刺啦,數(shù)據(jù)訪問的問題留特,長難查詢句的問題還是一些特定類型優(yōu)化的問題纠脾,逐一回答。

最后蜕青,小編分類整理了許多java進(jìn)階學(xué)習(xí)材料和BAT面試給熱愛IT行業(yè)的你苟蹈,如果需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進(jìn)階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進(jìn)行學(xué)習(xí)右核。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慧脱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贺喝,更是在濱河造成了極大的恐慌菱鸥,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躏鱼,死亡現(xiàn)場離奇詭異氮采,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)染苛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門鹊漠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茶行,你說我怎么就攤上這事躯概。” “怎么了畔师?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵娶靡,是天一觀的道長。 經(jīng)常有香客問我看锉,道長固蛾,這世上最難降的妖魔是什么结执? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮艾凯,結(jié)果婚禮上献幔,老公的妹妹穿的比我還像新娘。我一直安慰自己趾诗,他們只是感情好蜡感,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恃泪,像睡著了一般郑兴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贝乎,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天情连,我揣著相機(jī)與錄音,去河邊找鬼览效。 笑死却舀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锤灿。 我是一名探鬼主播挽拔,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼但校!你這毒婦竟也來了螃诅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤状囱,失蹤者是張志新(化名)和其女友劉穎术裸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亭枷,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袭艺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奶栖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匹表。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宣鄙,靈堂內(nèi)的尸體忽然破棺而出袍镀,到底是詐尸還是另有隱情,我是刑警寧澤冻晤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布苇羡,位于F島的核電站,受9級特大地震影響鼻弧,放射性物質(zhì)發(fā)生泄漏设江。R本人自食惡果不足惜锦茁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叉存。 院中可真熱鬧码俩,春花似錦、人聲如沸歼捏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞳秽。三九已至瓣履,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間练俐,已是汗流浹背袖迎。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腺晾,地道東北人燕锥。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像丘喻,于是被迫代替她去往敵國和親脯宿。 傳聞我的和親對象是個(gè)殘疾皇子念颈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容