日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL规范「索引规范」码出高效,码出质量 - 第399篇

發(fā)布時(shí)間:2023/12/20 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL规范「索引规范」码出高效,码出质量 - 第399篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

相關(guān)歷史文章(閱讀本文前,您可能需要先看下之前的系列👇

國(guó)內(nèi)最全的Spring?Boot系列之四

享元模式:共享女友?-?第355篇

助你寫(xiě)出更優(yōu)雅的代碼,讓你的領(lǐng)導(dǎo)對(duì)你愛(ài)不釋手 - 370篇

你是研發(fā)部門(mén)的領(lǐng)導(dǎo),你還不知道如何制定程序中的規(guī)則嗎?- 第378篇

OOP規(guī)范,居然還有這么多我不知道?- 第382篇

?

在編碼過(guò)程中,我們嘗嘗會(huì)遇到一些復(fù)雜關(guān)系的查詢(xún),在這里最容易出問(wèn)題,尤其是性能方面,因此對(duì)查詢(xún)語(yǔ)句的優(yōu)化顯然是重中之重。說(shuō)起提高查詢(xún)性能,就不得不提到索引了。

索引建的好會(huì)讓你一飛沖天,索引建的不好會(huì)讓你加班不斷。

那么了解索引的一些規(guī)范,就顯得尤為重要。

?第一章 編程規(guī)范

代碼中小小的注釋居然還有這么多的奧秘 - 第390篇

第二章 異常日志

阿里技術(shù)手冊(cè)告訴你「異常處理」如何得心應(yīng)手 - 第392篇

第三章 單元測(cè)試

學(xué)會(huì)這些「單元測(cè)試」規(guī)范,讓你的代碼更健壯

第四章 安全規(guī)范

代碼安全/權(quán)限控制/敏感數(shù)據(jù)規(guī)范多多 - 第395篇

第五章MySQL規(guī)范

一、建表規(guī)范

MySQL規(guī)范「建表規(guī)范」有了這個(gè)技術(shù)規(guī)范,看誰(shuí)還敢說(shuō)我的建表不規(guī)范!- 第397篇

二、索引規(guī)約

1.?【強(qiáng)制】業(yè)務(wù)上具有唯一特性的字段,即使是組合字段,也必須建成唯一索引。

說(shuō)明:不要以為唯一索引影響了 insert 速度,這個(gè)速度損耗可以忽略,但提高查找速度是明顯的;另外即使在應(yīng)用層做了非常完善的校驗(yàn)控制,只要沒(méi)有唯一索引,根據(jù)墨菲定律,必然有臟數(shù)據(jù)產(chǎn)生。

2.?【強(qiáng)制】超過(guò)三個(gè)表禁止 join。需要 join 的字段,數(shù)據(jù)類(lèi)型保持絕對(duì)一致;多表關(guān)聯(lián)查詢(xún)時(shí),保證被關(guān)聯(lián)的字段需要有索引。

說(shuō)明:即使雙表 join 也要注意表索引、SQL 性能。

3.?【強(qiáng)制】在 varchar 字段上建立索引時(shí),必須指定索引長(zhǎng)度,沒(méi)必要對(duì)全字段建立索引,根據(jù)實(shí)際文本區(qū)分度決定索引長(zhǎng)度。

說(shuō)明:索引的長(zhǎng)度與區(qū)分度是一對(duì)矛盾體,一般對(duì)字符串類(lèi)型數(shù)據(jù),長(zhǎng)度為 20 的索引,區(qū)分度會(huì)高達(dá) 90%以上,可以使用 count(distinct left(列名, 索引長(zhǎng)度))/count(*)的區(qū)分度來(lái)確定。

4.?【強(qiáng)制】頁(yè)面搜索嚴(yán)禁左模糊或者全模糊,如果需要請(qǐng)走搜索引擎來(lái)解決。

說(shuō)明:索引文件具有 B-Tree 的最左前綴匹配特性,如果左邊的值未確定,那么無(wú)法使用此索引。

5.?【推薦】如果有 order by 的場(chǎng)景,請(qǐng)注意利用索引的有序性。order by 最后的字段是組合索引的一部分,并且放在索引組合順序的最后,避免出現(xiàn) file_sort 的情況,影響查詢(xún)性能。

正例:where a=?and b=? order by c; 索引:a_b_c

反例:索引如果存在范圍查詢(xún),那么索引有序性無(wú)法利用,如:WHERE a>10 ORDER BY b; 索引 a_b 無(wú)法排序。

6.?【推薦】利用覆蓋索引來(lái)進(jìn)行查詢(xún)操作,避免回表。

說(shuō)明:如果一本書(shū)需要知道第 11 章是什么標(biāo)題,會(huì)翻開(kāi)第 11 章對(duì)應(yīng)的那一頁(yè)嗎?目錄瀏覽一下就好,這個(gè)目錄就是起到覆蓋索引的作用。

正例:能夠建立索引的種類(lèi)分為主鍵索引、唯一索引、普通索引三種,而覆蓋索引只是一種查詢(xún)的一種效果,用 explain 的結(jié)果,extra 列會(huì)出現(xiàn):using index。

7.?【推薦】利用延遲關(guān)聯(lián)或者子查詢(xún)優(yōu)化超多分頁(yè)場(chǎng)景。

說(shuō)明:MySQL 并不是跳過(guò) offset 行,而是取 offset+N 行,然后返回放棄前 offset 行,返回 N 行,那當(dāng)offset 特別大的時(shí)候,效率就非常的低下,要么控制返回的總頁(yè)數(shù),要么對(duì)超過(guò)特定閾值的頁(yè)數(shù)進(jìn)行 SQL改寫(xiě)。

正例:先快速定位需要獲取的 id 段,然后再關(guān)聯(lián):

SELECT a.*FROM?表 1 a, (select id from 表 1 where 條件 LIMIT 100000,20 ) b wherea.id=b.id

8.?【推薦】SQL 性能優(yōu)化的目標(biāo):至少要達(dá)到 range 級(jí)別,要求是 ref 級(jí)別,如果可以是 consts最好。

說(shuō)明:

1) consts 單表中最多只有一個(gè)匹配行(主鍵或者唯一索引),在優(yōu)化階段即可讀取到數(shù)據(jù)。

2) ref 指的是使用普通的索引(normal index)。

3) range 對(duì)索引進(jìn)行范圍檢索。

反例:explain 表的結(jié)果,type=index,索引物理文件全掃描,速度非常慢,這個(gè) index 級(jí)別比較 range還低,與全表掃描是小巫見(jiàn)大巫。

9.?【推薦】建組合索引的時(shí)候,區(qū)分度最高的在最左邊。

正例:如果 wherea=? and b=?,a 列的幾乎接近于唯一值,那么只需要單建 idx_a 索引即可。

說(shuō)明:存在非等號(hào)和等號(hào)混合判斷條件時(shí),在建索引時(shí),請(qǐng)把等號(hào)條件的列前置。如:wherec>? and d=? 那么即使 c 的區(qū)分度更高,也必須把 d 放在索引的最前列,即建立組合索引 idx_d_c。

10.?【推薦】防止因字段類(lèi)型不同造成的隱式轉(zhuǎn)換,導(dǎo)致索引失效。

11.?【參考】創(chuàng)建索引時(shí)避免有如下極端誤解:

1) 索引寧濫勿缺。認(rèn)為一個(gè)查詢(xún)就需要建一個(gè)索引。

2) 吝嗇索引的創(chuàng)建。認(rèn)為索引會(huì)消耗空間、嚴(yán)重拖慢記錄的更新以及行的新增速度。

3) 抵制惟一索引。認(rèn)為惟一索引一律需要在應(yīng)用層通過(guò)“先查后插”方式解決。

我就是我,是顏色不一樣的煙火。 我就是我,是與眾不同的小蘋(píng)果。

à悟空學(xué)院:悟空學(xué)院

學(xué)院中有Spring?Boot相關(guān)的課程!!

SpringBoot視頻:從零開(kāi)始學(xué)Spring Boot Plus - 網(wǎng)易云課堂

SpringBoot交流平臺(tái):https://t.cn/R3QDhU0

SpringSecurity5.0視頻:權(quán)限管理spring security - 網(wǎng)易云課堂

ShardingJDBC分庫(kù)分表:分庫(kù)分表Sharding-JDBC實(shí)戰(zhàn) - 網(wǎng)易云課堂

分布式事務(wù)解決方案:分布式事務(wù)解決方案「手寫(xiě)代碼」 - 網(wǎng)易云課堂

JVM內(nèi)存模型調(diào)優(yōu)實(shí)戰(zhàn):深入理解JVM內(nèi)存模型/調(diào)優(yōu)實(shí)戰(zhàn) - 網(wǎng)易云課堂

Spring入門(mén)到精通:Spring零基礎(chǔ)從入門(mén)到精通 - 網(wǎng)易云課堂

大話(huà)設(shè)計(jì)模式之愛(ài)你:大話(huà)設(shè)計(jì)模式之愛(ài)你一萬(wàn)年 - 網(wǎng)易云課堂

總結(jié)

以上是生活随笔為你收集整理的MySQL规范「索引规范」码出高效,码出质量 - 第399篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。