現實中,mysql可以根據業務需要建立組合索引,由于mysql使用B-Tree格式索引,可以直接定位記錄,無需掃描。 mysql建立多列索引有最左前綴的原則,即最左優先,如: 如果有一個2列的索引(col1,col2),則已經對(col1)、(col1,col2)上建立了索引; 如果有一個 3
現實中,mysql可以根據業務需要建立組合索引,由于mysql使用B-Tree格式索引,可以直接定位記錄,無需掃描。mysql建立多列索引有最左前綴的原則,即最左優先,如:
如何建立組合索引?
例如用戶表,如果按照用戶姓名查詢比較多,可以考慮在根據姓名建立索引。這里有兩種形式:1在用戶的名字字段(name)在做索引。2,在用戶的名字和姓氏字段建立索引(name+family_name)。我們查看了下name字段的選擇性,執行如下語句。
SELECT count(DISTINCT(name))/count(*) AS Selectivity FROM user;
+-------------+
發現值非常小,因為name相同的用戶實在太多。 再查看下name+family_name的選擇性。
SELECT count(DISTINCT(concat(name, family_name)))/count(*) AS Selectivity FROM user;
+-------------+
發現名字完全相同的員工基本沒有。但是索引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;
+-------------+
雖然不如以name+family_name的選擇性高,但是已經基本滿足要求。
本文出自:http://www.phpddt.com/, 原文地址:http://www.phpddt.com/db/mysql-indexes-optimization.html, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com