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

一文簡(jiǎn)單了解MySQL前綴索引

 更新時(shí)間:2022年04月02日 10:21:46   作者:mashen  
MySQL是支持前綴索引的,也就是說你可以定義字符串的一部分作為索引,下面這篇文章主要給大家介紹了關(guān)于MySQL前綴索引的相關(guān)資料,需要的朋友可以參考下

當(dāng)要索引的列字符很多時(shí) 索引則會(huì)很大且變慢

( 可以只索引列開始的部分字符串 節(jié)約索引空間 從而提高索引效率 )

原則: 降低重復(fù)的索引值

例如現(xiàn)在有一個(gè)地區(qū)表

areagdpcode
chinaShanghai100aaa
chinaDalian200bbb
usaNewYork300ccc
chinaFuxin400ddd
chinaBeijing500eee

發(fā)現(xiàn) area 字段很多都是以 china 開頭的

那么如果以前1-5位字符做前綴索引就會(huì)出現(xiàn)大量索引值重復(fù)的情況

索引值重復(fù)性越低 查詢效率也就越高

前綴索引測(cè)試

// 創(chuàng)建一個(gè)測(cè)試表
CREATE TABLE `x_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `x_name` varchar(255) NOT NULL,
  `x_time` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4145025 DEFAULT CHARSET=utf8mb4

// 添加200萬條測(cè)試數(shù)據(jù)
INSERT INTO x_test(x_name,x_time) SELECT CONCAT(rand()*3300102,x_name),x_time FROM x_test WHERE id < 30000;

200萬 測(cè)試數(shù)據(jù)

  • 在無任何索引的情況下隨便查詢一條
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查詢時(shí)間:2.253s

  • 添加前綴索引 ( 以第一位字符創(chuàng)建前綴索引 )
    alter table x_test add index(x_name(1))再次查詢相同sql語句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查詢時(shí)間:3.291s
    當(dāng)使用第一位字符創(chuàng)建前綴索引后 貌似查詢的時(shí)間更長了
    因?yàn)橹坏谝晃蛔址运饕档闹刈x性太大了
    200萬條數(shù)據(jù)全以數(shù)字開頭那么平均20萬條的數(shù)據(jù)都是相同的索引值

  • 重新建立前綴索引 這次以前4位字符來創(chuàng)建
    alter table x_test add index(x_name(4));再次查詢相同sql語句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查詢時(shí)間:0.703s
    這次以前4位創(chuàng)建索引 大大減少了索引值的重復(fù)性 查詢速度從3秒提升到0.7秒

  • 200萬條數(shù)據(jù)都以數(shù)字開頭 而0-9排列組合7位則可達(dá)到千萬種組合
    也就是以前7位來做索引則不會(huì)出現(xiàn)重復(fù)索引值的情況了
    alter table x_test add index(x_name(7));再次查詢相同sql語句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查詢時(shí)間:0.014s ( 首次執(zhí)行無緩存狀態(tài)下 )

補(bǔ)充:使用前綴索引的執(zhí)行過程

  1. 從index2的索引樹上,找到滿足索引值是“zhangs”的記錄,找到第一個(gè)是ID1;
  2. 到主鍵索引樹上查到ID1這一行,判斷email的值滿不滿足where后的條件,不滿足這一行丟棄。
  3. 繼續(xù)回到index2這個(gè)索引樹上查下一條記錄,發(fā)現(xiàn)如果還是"zhangs",取出ID2,再回到ID2索引樹上進(jìn)行判斷,如果值正確,將結(jié)果返回結(jié)果集中。
  4. 重復(fù)執(zhí)行以上流程,直到從index2索引樹上取出的數(shù)據(jù)不是“zhangs”,循環(huán)結(jié)束。

通過以上執(zhí)行流程的分析你就可以知道,前綴索引會(huì)導(dǎo)致掃描的行數(shù)變多,這和你所指定前綴的長度有關(guān)?;蛟Semail(7)中的區(qū)分度就比email(6)高,就不會(huì)掃描那么多行。

也即是說使用前綴索引,定義好長度,就可以節(jié)省空間又不用額外增加太多的查詢成本

那怎樣定義前綴索引長度比較好呢?

實(shí)際上,建立索引時(shí)關(guān)注的是區(qū)分度,區(qū)分度越高,越能體現(xiàn)索引的價(jià)值和他的優(yōu)勢(shì)。因此我們可以通過統(tǒng)計(jì)索引上有不同的值來判斷要使用多長的前綴。

select count(distinct email) as L from User;

MySQL 5.7 參考手冊(cè) - 前綴索引

總結(jié)

到此這篇關(guān)于MySQL前綴索引的文章就介紹到這了,更多相關(guān)MySQL前綴索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL之解決字符串?dāng)?shù)字的排序失效問題

    MySQL之解決字符串?dāng)?shù)字的排序失效問題

    這篇文章主要介紹了MySQL之解決字符串?dāng)?shù)字的排序失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQLJSON索引用法舉例簡(jiǎn)單介紹

    MySQLJSON索引用法舉例簡(jiǎn)單介紹

    索引是一個(gè)數(shù)據(jù)結(jié)構(gòu),索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(有序),這篇文章主要給大家介紹了關(guān)于MySQLJSON索引用法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • mysql數(shù)據(jù)庫保存路徑查找方式

    mysql數(shù)據(jù)庫保存路徑查找方式

    這篇文章主要介紹了mysql數(shù)據(jù)庫保存路徑查找方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教方法
    2023-05-05
  • MySQL數(shù)據(jù)庫誤操作后快速回滾的方法

    MySQL數(shù)據(jù)庫誤操作后快速回滾的方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫誤操作后快速回滾的方法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • MySQL 數(shù)據(jù)庫 ALTER命令講解

    MySQL 數(shù)據(jù)庫 ALTER命令講解

    MySQL 為關(guān)系型數(shù)據(jù)庫(Relational Database Management System)。本文重點(diǎn)給大家介紹mysql數(shù)據(jù)庫alert命令講解,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • mysql中order by與group by的區(qū)別

    mysql中order by與group by的區(qū)別

    以下是對(duì)mysql中order by與group by的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • 淺談Mysql insert on duplicate key 死鎖問題定位與解決

    淺談Mysql insert on duplicate key 死鎖問

    本文介紹了在并發(fā)場(chǎng)景下的 insert on duplicate key update sql 出現(xiàn)的死鎖,經(jīng)過分析發(fā)現(xiàn)這種sql確實(shí)比較容易造成死鎖,這篇文章就從分析死鎖展開,到最終如何解決這樣的問題 分享相應(yīng)的思路,感興趣的可以了解一下
    2022-05-05
  • MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實(shí)現(xiàn)原理

    MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實(shí)現(xiàn)原理

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實(shí)現(xiàn)原理,但是mvcc?的實(shí)現(xiàn)原理是什么呢?下文我們就來實(shí)例說明來mvcc?的實(shí)現(xiàn)原理,感興趣的小伙伴可以參考一下
    2022-05-05
  • mysql8.0.23 msi安裝超詳細(xì)教程

    mysql8.0.23 msi安裝超詳細(xì)教程

    這篇文章主要介紹了mysql8.0.23 msi安裝超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • MySQL中獲取時(shí)間的所有方法小結(jié)

    MySQL中獲取時(shí)間的所有方法小結(jié)

    在MySQL數(shù)據(jù)庫開發(fā)中,獲取時(shí)間是一個(gè)常見的需求,MySQL提供了多種方法來獲取當(dāng)前日期、時(shí)間和時(shí)間戳,并且可以對(duì)時(shí)間進(jìn)行格式化、計(jì)算和轉(zhuǎn)換,本文介紹了一些常用的MySQL時(shí)間函數(shù)及其示例,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

贺州市| 鄢陵县| 绥化市| 阜南县| 玛沁县| 聂荣县| 汶上县| 铜陵市| 津市市| 达日县| 五大连池市| 五峰| 揭西县| 将乐县| 上犹县| 紫云| 象山县| 奉节县| 定边县| 淄博市| 苍溪县| 屯门区| 嘉善县| 手游| 大安市| 高尔夫| 道真| 宣恩县| 嘉定区| 克东县| 弥勒县| 玛纳斯县| 灵石县| 宾川县| 鸡东县| 安泽县| 织金县| 博爱县| 中西区| 淄博市| 南雄市|