自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你好,面試官 | 我不僅知道MySQL索引,還會優(yōu)化呢~

數(shù)據(jù)庫 MySQL
本期會模擬面試 MySQL 索引更深層 相關(guān)內(nèi)容。涉及知識點(diǎn),MySQL 索引設(shè)計原則,使用法則,MySQL優(yōu)化等。

小龍有話說

本期會模擬面試 MySQL 索引更深層 相關(guān)內(nèi)容。

涉及知識點(diǎn),MySQL 索引設(shè)計原則,使用法則,MySQL優(yōu)化等

本期題改編自 ——2021屆秋招 北森 二面

面試現(xiàn)場

叮叮叮......

面試官:“你好,我是XX面試官,請問是小龍嗎?”

小龍:“您好,面試官,我是小龍”

面試官:“好的,現(xiàn)在有空嗎,我們開始面試吧”

小龍:“嗯嗯,準(zhǔn)備好啦”

.......

other questions

.......

面試官:“我看你簡歷上有提到你對 MySQL 掌握得挺好的對吧?。”

小龍:“哈哈,還算可以吧!”

面試官:“好的,能告訴我 MySQL 中的怎樣創(chuàng)建索引嗎?”

小龍:“好的,我簡單說幾種?!?/p>

小龍:“一種是通過 alter 命令,ALTER TABLE table_name ADD INDEX index_name (column_list);”

小龍:“也可以在創(chuàng)建表時創(chuàng)建,CREATE INDEX index_name ON table_name (column_list);”

面試官:“好的,我們都知道索引用的好與壞,可以間接影響整個系統(tǒng)性能,那么你平時是怎樣去設(shè)計索引的呢?”

小龍:“其實(shí)道理很簡單,無須繁瑣花哨,在公司項(xiàng)目中,我們更看重的是性價比?!?/p>

獨(dú)白:“來了來了,幸好在我【面試筆記】中總結(jié)過,來吧,隨便挑幾點(diǎn)吹給你聽?!?/p>

面試官:“說說看~”

小龍:“總的來說,你創(chuàng)建索引目的就是要在盡可能少占內(nèi)存情況下去設(shè)計一個合適的索引讓查詢速度更快。”

面試官:“不錯,接著說”

小龍:“我們一般建在 where 字段匹配條件后,為了讓創(chuàng)建索引所帶來的好處大于其壞處,我們一定要在數(shù)據(jù)量大,也就是基數(shù)大的情況下才考慮索引?!?/p>

小龍:“因?yàn)閯?chuàng)建索引本身就要占空間,操作數(shù)據(jù)也要操作索引文件,數(shù)據(jù)少得不償失?!?/p>

面試官:“嗯嗯,不錯,還有嗎?”

小龍:“嗯,為了使得效率更高,應(yīng)該選擇區(qū)分度大,匹配度高的字段建立索引 。而且索引不適合于頻繁更新的數(shù)據(jù),因?yàn)椴僮鲾?shù)據(jù)同事需要維護(hù)索引又得花費(fèi)時間?!?/p>

面試官:“OK,那假如我本來已經(jīng)創(chuàng)建了個 (a) 索引,但是由于需求我們現(xiàn)在需要加上(b)索引,你覺得怎樣操作更好呢?”

小龍:“ 嗯,我覺得我們創(chuàng)建索引方面,我們應(yīng)該盡量擴(kuò)展索引,而不是創(chuàng)建新的索引,可以合理利用聯(lián)合索引,如(a)->(a,b) 。”

小龍:“除此之外,我們在使用時還得考慮索引是否會失效。不恰當(dāng)?shù)氖褂盟饕?,不僅沒有提高性能,反而占額外內(nèi)存空間,影響效率,所以說學(xué)會如何使用也是一門學(xué)問?!?/p>

面試官:“嗯嗯,那在使用時哪些地方需要我們注意呢?”

小龍:“這個在我【面試筆記】中詳細(xì)總結(jié)過啦,隨便給面試官舉幾個吧?!?/p>

小龍:“比如,我們在寫模糊查詢時,如果以 %開頭,索引會因此失效。”

面試官:“那你知道具體原因嗎?”

獨(dú)白:“牛逼,這個考得還算有水平”

小龍:“其實(shí),你理解了索引的構(gòu)造排列,你就懂了。”

小龍:”我們通常用的索引數(shù)據(jù)結(jié)構(gòu)是B+樹,而索引是有序排列的;索引的排列順序是根據(jù)比較字符串的首字母排序的,如果首字母相同,就根據(jù)比較第二個字母進(jìn)行排序,以此類推?!?/p>

小龍:”因此如果把 % 放在了前面,最左的 n 個字母便是模糊不定的,無法根據(jù)索引的有序性 準(zhǔn)確的定位到某一個索引,只能進(jìn)行全表掃描,找出符合條件的數(shù)據(jù)?!?/p>

面試官:“嗯嗯,好的,基礎(chǔ)不錯,那在項(xiàng)目中有嘗試去對MySQL進(jìn)行調(diào)優(yōu)優(yōu)化這些嗎?”

獨(dú)白:“幸好在我【面試筆記】中從 索引+sql語句+數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化+優(yōu)化器優(yōu)化+架構(gòu)優(yōu)化 詳細(xì)總結(jié)了?!?/p>

小龍:“ 優(yōu)化我們可以從很多方面考慮,比如 索引+sql語句+數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化+優(yōu)化器優(yōu)化+架構(gòu)優(yōu)化,這里簡單說幾個吧!”

面試官:“可以?!?/p>

小龍:“比如,我們從基本的索引考慮,盡量使用覆蓋索引,5.6了還支持索引下推呢!再寫多讀少的場景下,可以選擇普通索引而不要唯一索引,不懂可以看上一篇文章。”

小龍:“當(dāng)然需要考慮索引失效,和設(shè)計原則,上文說過了,不在贅述?!?/p>

小龍:“在寫 sql 時,若是主鍵自增的表,還可以把 Limit 查詢轉(zhuǎn)換成某個位置的查詢,比如 select * from tb_sku where id>20000 limit 10;這樣可以很好利用主鍵索引快速定位?!?/p>

小龍:“優(yōu)化器我們還可以使用 MRR 【Multi-Range Read】將 ID 或鍵值讀到 buffer 排序,通過把「隨機(jī)磁盤讀」,轉(zhuǎn)化為「順序磁盤讀」,減少磁盤IO,從而提高了索引查詢的性能。就暫時只說這些吧!”

面試官:“哈哈,好的,沒想到你還懂這些,不錯?!?/p>

小龍:“對啦,在使用過程中,我們首先應(yīng)該做到寫一手好 SQL ,考慮索引失效,復(fù)合查詢、事務(wù)、鎖等,其實(shí)把這些都注意,工作中大多數(shù)問題都已經(jīng)解決啦。”

小龍:“然后假如遇上了 SQL 執(zhí)行變慢,此時我們應(yīng)該先排查問題所在,如果可以直接找到問題可以直接解決。實(shí)在不行再考慮從優(yōu)化器參數(shù)、架構(gòu)、表設(shè)計等進(jìn)行優(yōu)化,這才是最好的優(yōu)化方案?!?/p>

面試官:“說的很好,看來平時還是有認(rèn)真學(xué)習(xí)參與項(xiàng)目中?!?/p>

面試官:“好的,時間差不多啦,今天暫時聊那么多,下期再談?wù)??!?/p>

獨(dú)白:“不愧是我,真男人是也!”

知識總結(jié)

本期我們通過面試模擬逐漸深入探討了 MySQL ,下期會繼續(xù)深入剖析關(guān)于 事務(wù)、鎖、日志等底層實(shí)現(xiàn)原理。訂閱+星標(biāo)持續(xù)追更

面試重點(diǎn)

索引設(shè)計原則?使用索引注意點(diǎn)?MySQL優(yōu)化方案等

責(zé)任編輯:武曉燕 來源: 小龍coding
相關(guān)推薦

2025-03-26 01:25:00

MySQL優(yōu)化事務(wù)

2025-03-04 08:06:17

2022-11-15 17:45:46

數(shù)據(jù)庫MySQL

2021-03-24 10:25:24

優(yōu)化VUE性能

2022-02-17 21:13:08

MySQL架構(gòu)體系

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2024-08-08 16:53:17

2019-07-15 16:35:43

MySQL索引阿里

2021-02-06 09:21:17

MySQL索引面試

2022-10-17 00:04:30

索引SQL訂單

2022-09-29 07:30:57

數(shù)據(jù)庫索引字段

2024-03-07 17:21:12

HotSpotJVMHot Code

2021-03-22 17:20:48

MYSQL開發(fā)數(shù)據(jù)庫

2020-05-12 11:05:54

MySQL索引數(shù)據(jù)庫

2020-07-02 07:52:11

RedisHash映射

2024-03-25 13:02:00

MySQL索引主鍵

2021-06-29 11:05:25

MySQLCPU數(shù)據(jù)庫

2023-03-30 07:34:10

Linux性能數(shù)據(jù)結(jié)構(gòu)

2020-02-25 16:56:02

面試官有話想說

2022-05-23 08:43:02

BigIntJavaScript內(nèi)置對象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號