MySQL 常見(jiàn)SQL優(yōu)化、索引優(yōu)化

索引優(yōu)化

索引區(qū)分度

前言

索引長(zhǎng)度直接影響索引文件的大小,影響增刪改的速度,并間接影響查詢速度(占用內(nèi)存多)

針對(duì)列的值,從左往右截取部分來(lái)建立索引(前綴索引

  1. 截的越短,重復(fù)度越高,區(qū)分度越小,索引效果越差。
  2. 截的越長(zhǎng),重復(fù)度越低,區(qū)分度越大,索引效果越好。但是需要更多的空間存儲(chǔ)索引文件。增刪改變慢。

所以我們需要在區(qū)分度 / 長(zhǎng)度兩者間取得一個(gè)平衡。我們可以截取不同的長(zhǎng)度,并測(cè)試其區(qū)分度。

公式

單列區(qū)分度計(jì)算:select count(distinct (列名))/ count(*) from table; 獲取單列最大區(qū)分度
索引區(qū)分度計(jì)算:select count(distinct left(列名,截取長(zhǎng)度))/ count(*) from table; 計(jì)算指定索引長(zhǎng)度區(qū)分度

區(qū)分度值位于 0.0000~1.0000 之間,該值越大即該字段的區(qū)分度越大!
char,varchar類型,length 可以小于字段實(shí)際長(zhǎng)度;如果是 blog和 text類型,必須指定 length.

演示
區(qū)分度計(jì)算
占用差
索引建立

優(yōu)先采用區(qū)分度高的列建立索引,索引列截取長(zhǎng)度可適當(dāng)延長(zhǎng)一定范圍

常見(jiàn)計(jì)算規(guī)則
  1. 不同的字符集(表的字符集),一個(gè)字符占用的字節(jié)數(shù)不同。
    • latin1: 1character = 1byte
    • gbk: 1character = 2byte
    • utf8: 1character = 3byte
    • utf8mb4: 1character = 4byte
  2. 所有的索引字段,如果沒(méi)有設(shè)置not null,則需要加一個(gè)字節(jié)。
  3. 定長(zhǎng)字段,int占四個(gè)字節(jié)、date占三個(gè)字節(jié)、char(n)占n個(gè)字符。
  4. 對(duì)于可變字段varchar(n),則有n個(gè)字符+兩個(gè)字節(jié)。
  • char(n) = (Character Set:utf8mb4=4/utf8=3/gbk=2/latin1=1) * n(列長(zhǎng)度) + 1(允許null)
  • varchar(n) = (Character Set:utf8mb4=4/utf8=3/gbk=2/latin1=1) * n(列長(zhǎng)度) + 2(固定值) + 1(允許null)

未完待續(xù)

SQL優(yōu)化

  • 待寫作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近項(xiàng)目剛剛上線,所以有時(shí)間對(duì)項(xiàng)目進(jìn)行優(yōu)化,索引首當(dāng)其沖,但自己對(duì)數(shù)據(jù)庫(kù)這方面知識(shí)了解很少,只能網(wǎng)上學(xué)習(xí),發(fā)現(xiàn)了一...
    內(nèi)沐閱讀 225評(píng)論 0 0
  • 之前的文章一直在規(guī)避索引的建立去優(yōu)化數(shù)據(jù)庫(kù),不是不想講,而是這個(gè)太重要,必須抽出來(lái)講。今天我們就來(lái)研究下數(shù)據(jù)庫(kù)索引...
    sherlock_6981閱讀 3,066評(píng)論 0 23
  • 第一章 總則 第1條 目的及適用范圍 規(guī)范生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)設(shè)計(jì),統(tǒng)一數(shù)據(jù)庫(kù)設(shè)計(jì)標(biāo)準(zhǔn)。避免設(shè)計(jì)不合理造成重復(fù)犯錯(cuò)。 適...
    今天要開(kāi)心鴨閱讀 603評(píng)論 0 0
  • 參考資料:極客時(shí)間《MySQL實(shí)戰(zhàn)45講》 1 基礎(chǔ)架構(gòu) 存儲(chǔ)引擎層負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取。其架構(gòu)模式是插件式的,支...
    IM后海大鯊魚(yú)閱讀 1,027評(píng)論 0 0
  • MySQL 官方對(duì)索引(Index)的定義是存儲(chǔ)引擎用于快速查找記錄的一種數(shù)據(jù)結(jié)構(gòu)。(1)索引是物理數(shù)據(jù)頁(yè),數(shù)據(jù)庫(kù)...
    四街的1024閱讀 217評(píng)論 0 0

友情鏈接更多精彩內(nèi)容