国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

mysql建立組合索引原則

2024-04-25 20:36:03
字體:
來源:轉載
供稿:網友

現實中,mysql可以根據業務需要建立組合索引,由于mysql使用B-Tree格式索引,可以直接定位記錄,無需掃描。mysql建立多列索引有最左前綴的原則,即最左優先,如:

如果有一個2列的索引(col1,col2),則已經對(col1)、(col1,col2)上建立了索引;

如果有一個3列索引(col1,col2,col3),則已經對(col1)、(col1,col2)和(col1,col2,col3)上建立了索引;

如何建立組合索引?

最頻繁使用的列放在左邊;

查看列的選擇性(即該列的索引值數量與記錄數量的比值),比值越高,效果越好;

例如用戶表,如果按照用戶姓名查詢比較多,可以考慮在根據姓名建立索引。這里有兩種形式:1在用戶的名字字段(name)在做索引。2,在用戶的名字和姓氏字段建立索引(name+family_name)。我們查看了下name字段的選擇性,執行如下語句。

SELECT count(DISTINCT(name))/count(*) AS Selectivity FROM user;
+-------------+

| Selectivity |
+-------------+

| 0.0052 |

+-------------+

發現值非常小,因為name相同的用戶實在太多。 再查看下name+family_name的選擇性。

SELECT count(DISTINCT(concat(name,
family_name)))/count(*) AS Selectivity FROM user;

+-------------+

| Selectivity |
+-------------+

| 0.9563 |

+-------------+

發現名字完全相同的員工基本沒有。但是索引key如果太長會使得索引文件變大并且維護開銷增大,name+family name的長度等于30,還是希望有一個艱巨選擇性和長度的方案。 因此可以考慮在name和family前自己字符上面建立索引,例如 name + left(family_name,5):

SELECT count(DISTINCT(concat(name, left(family_name,5))))/count(*) AS Selectivity FROM user;

+-------------+

| Selectivity |

+-------------+

| 0.9012 |

+-------------+

雖然不如以name+family_name的選擇性高,但是已經基本滿足要求。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜川市| 新竹市| 宜丰县| 大新县| 黎城县| 阿尔山市| 城市| 金湖县| 鄯善县| 新巴尔虎左旗| 含山县| 梁河县| 宜兰县| 万山特区| 大足县| 友谊县| 大同县| 虹口区| 漳浦县| 通山县| 桑日县| 凤阳县| 陕西省| 长春市| 宣汉县| 延川县| 格尔木市| 江口县| 墨脱县| 墨竹工卡县| 陵川县| 剑川县| 陆河县| 香河县| 宁武县| 广东省| 广平县| 西乌珠穆沁旗| 大冶市| 奇台县| 扬中市|