最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL給字符串加一個高效索引的實現(xiàn)

 更新時間:2023年03月20日 10:06:34   作者:程序員拾山  
本文主要介紹了MySQL給字符串加一個高效索引的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

需求

在日常需求中,用戶使用手機號或者郵箱登錄某一個系統(tǒng),是一個很常見的操作,那如何在類似手機號或者郵箱這樣的字段上建立一個合理的索引呢?

前綴索引

前綴索引,就是以一個字段值的一部分作為索引。我們在MySQL中創(chuàng)建索引時,如果不指定索引字段的長度,那么就會以整個字符串來建立索引。

語句1:
alter table test add index idx(email);
語句2:
alter table test add index idx(email(8));

對于語句1,創(chuàng)建的索引中,會包含每條記錄中的整個email字符串值。

對于語句2,創(chuàng)建的索引中,保存的是每條記錄中email字段的前8個字節(jié)。

使用前綴索引的優(yōu)勢很明顯,那就是索引占用的空間會更小,整個索引樹會更緊湊,樹的高度相對更低。

但是相應(yīng)的,索引的區(qū)分度會變低,可能導(dǎo)致索引掃描行數(shù)增加。

在我們創(chuàng)建索引時,索引的區(qū)分度是一個很重要的指標(biāo)。區(qū)分度越高,重復(fù)的值就越少,掃描的效率就越高。

在使用前綴索引時,合理規(guī)劃使用的前綴長度,不僅可以節(jié)省空間,還可以不用額外增加掃描的行數(shù)。具體使用多少的長度,建議根據(jù)我們的實際業(yè)務(wù)場景來判斷、測試。

倒序+前綴索引

倒序+前綴索引有一個經(jīng)典的使用場景,就是對身份證號做索引。

假設(shè)我們現(xiàn)在要維護一個市縣所有人的身份信息,其中按身份證號查詢是一個高頻場景。

身份證號碼一共15位或者18位,一般來說,同一個市縣的人身份證號前6位一般是相同的,如果直接對身份證號做全索引,那么會比較浪費空間,導(dǎo)致性能下降。直接前綴索引的話,前6位的區(qū)分度又很低(甚至可以說沒有,因為大家前6位基本都一樣)。

這時,使用倒序+前綴索引的好處就體現(xiàn)出來了。

我們先將身份證倒序存儲,或者冗余一個倒序的身份證號字段,然后取前6位做前綴索引。

身份證后6位的區(qū)分度已經(jīng)基本上夠我們使用了,如果你還覺得查詢速度不夠,那取前8位也是沒問題的。

總結(jié)

我們之所以盡量避免對字符串加全值索引,是因為字符串字段的長度不好預(yù)估,可能會變得很大。在一個值很大的字段上做索引,會額外的占用更多的空間,數(shù)據(jù)頁上可存儲的索引值會變少,導(dǎo)致MySQL樹的高度變高,這樣查詢數(shù)據(jù)時,IO增加,性能下降。

但是,凡事都有例外,有時我們也不能為了優(yōu)化而優(yōu)化。

比如我們現(xiàn)在要維護一個高校的師生信息,按整個學(xué)校2萬人,每年新增1萬新學(xué)生來計算,10年時間也不過12萬數(shù)據(jù)而已。即使在一個身份證號字段上加上全字段索引又能多占用多少空間呢?能省出多少性能呢?

有時,從業(yè)務(wù)量預(yù)估優(yōu)化和收益比,也是一個很好的習(xí)慣。

到此這篇關(guān)于MySQL給字符串加一個高效索引的實現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL字符串高效索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決“無法啟動mysql服務(wù) 錯誤1069”的方法

    解決“無法啟動mysql服務(wù) 錯誤1069”的方法

    本文給大家分享的是小編解決自己網(wǎng)站無法連接數(shù)據(jù)庫的時候遇到的“無法啟動mysql服務(wù) 錯誤1069”的方案,有相同需求的小伙伴可以參考下
    2017-08-08
  • mysql?8.0.28安裝配置方法圖文教程(壓縮包方式)

    mysql?8.0.28安裝配置方法圖文教程(壓縮包方式)

    這篇文章主要為大家詳細介紹了mysql?8.0.28安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • KubeSphere部署mysql的詳細步驟

    KubeSphere部署mysql的詳細步驟

    本文介紹了在KubeSphere中部署Mysql的詳細步驟,包括創(chuàng)建mysql配置、pvc掛載、工作負載、服務(wù),并測試數(shù)據(jù)庫連接,步驟詳盡,包括yaml配置和環(huán)境變量設(shè)置,特別強調(diào)了路徑一致性和外部訪問設(shè)置,還提到了使用NodePort模式解決自定義域名連接問題
    2024-10-10
  • MySQL?時區(qū)與?serverTimezone詳解

    MySQL?時區(qū)與?serverTimezone詳解

    存儲?TIMESTAMP?類型數(shù)據(jù)時,MySQL 會根據(jù)當(dāng)前會話的時區(qū)將時間轉(zhuǎn)換為 UTC 時間,MySQL 實際存儲的是 UTC 時間,這篇文章主要介紹了MySQL?時區(qū)與?serverTimezone,需要的朋友可以參考下
    2024-12-12
  • MySQL數(shù)據(jù)庫遠程訪問權(quán)限設(shè)置方式

    MySQL數(shù)據(jù)庫遠程訪問權(quán)限設(shè)置方式

    這篇文章主要介紹了MySQL數(shù)據(jù)庫遠程訪問權(quán)限設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MySQL數(shù)據(jù)庫的觸發(fā)器和事務(wù)

    MySQL數(shù)據(jù)庫的觸發(fā)器和事務(wù)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的觸發(fā)器和事務(wù),觸發(fā)器是SQL?server提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲過程,是由事件來觸發(fā)
    2022-08-08
  • MySQL全局共享內(nèi)存介紹

    MySQL全局共享內(nèi)存介紹

    這篇文章主要介紹了MySQL全局共享內(nèi)存介紹,全局共享內(nèi)存則主要是 MySQL Instance(mysqld進程)以及底層存儲引擎用來暫存各種全局運算及可共享的暫存信息,如存儲查詢緩存的 Query Cache,緩存連接線程的 Thread Cache等等,需要的朋友可以參考下
    2014-12-12
  • MySQL復(fù)制優(yōu)點、原理詳解

    MySQL復(fù)制優(yōu)點、原理詳解

    本篇文章主要給大家詳細講解了MySQL復(fù)制優(yōu)點以及Mysql復(fù)制的原理知識,對此有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • mysql提示got timeout reading communication packets的解決方法

    mysql提示got timeout reading communication packets的解決方法

    今天發(fā)現(xiàn)mysql錯誤日志中出現(xiàn)got timeout reading communication packets,一般情況因為部分頁面生成有問題導(dǎo)致,這里簡單分享一下解決方法
    2019-05-05
  • MySQL8.0.28安裝教程詳細圖解(windows?64位)

    MySQL8.0.28安裝教程詳細圖解(windows?64位)

    如果電腦上已經(jīng)有MySQL數(shù)據(jù)庫再進行重做往往會遇到問題,下面這篇文章主要給大家介紹了關(guān)于windows?64位系統(tǒng)下MySQL8.0.28安裝教程的詳細教程,文章通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-04-04

最新評論

贵阳市| 封丘县| 蒙自县| 阜阳市| 阳泉市| 松滋市| 汕尾市| 仙游县| 山阳县| 逊克县| 石城县| 普兰县| 保德县| 化德县| 吉林省| 冀州市| 庄河市| 巴彦淖尔市| 遂昌县| 易门县| 蕲春县| 五台县| 眉山市| 大关县| 泰宁县| 定州市| 古丈县| 花垣县| 临城县| 井研县| 静乐县| 玉溪市| 苏尼特左旗| 东兴市| 大兴区| 吉安市| 山阴县| 罗定市| 庄河市| 凤台县| 水富县|