字首索引,是指對於varchar/text/blob型別的字段建立索引時一般都會選擇前n個字元作為索引。索引很長的字元列,會讓索引變得大且慢。索引開始的部分字元,這樣可以大大節約索引空間,從而提高索引效率,但這樣也會降低索引的選擇性。索引的選擇性是指不重複的索引值(也稱為基數,cardinality)和資料表的記錄總數的比值。
計算公式:
select count(distinct(a))/count(*) from table1;
select count(distinct(left((uuid),2)))/count(1) as ind2,
count(distinct(left((uuid),3)))/count(1) as ind3,
count(distinct(left((uuid),4)))/count(1) as ind4,
count(distinct(left((uuid),5)))/count(1) as ind5,
count(distinct(left((uuid),6)))/count(1) as ind6,
count(distinct(left((uuid),7)))/count(1) as ind7
from table_a;
選擇=5的時候 即索引長度為5[效果更加接近1]
如何給字段的後幾個字元加索引而不是給整個欄位加
表裡邊有乙個欄位image_url,想給他加索引但是這個欄位有很多內容是重複的如下:
image_url
給整個欄位加索引會不會有問題啊?
能不能就只給這個欄位的後13個字元加索引啊,因為這13個字元才是我查詢用的資料?
還有加上以後用這個索引的時候,要注意哪些東西?
據我所知,mysql沒有字尾索引(如果說錯請指正);
如果真相要對這個字段新增索引又不想加整個字段,給你出歪招,程式可能稍微多一步。
建立欄位image_url 按你的字元數新增字首索引。訪問該字段時反轉字元傳儲存。結果如下:
gpj.13091401s/cipl/moc.nabuod.1gmi//:ptth
查詢的時候反轉一下就可以了。
select count(distinct(left(reverse(msg_id),2)))/count(1) as ind2,
count(distinct(left(reverse(msg_id),3)))/count(1) as ind3,
count(distinct(left(reverse(msg_id),4)))/count(1) as ind4,
count(distinct(left(reverse(msg_id),5)))/count(1) as ind5,
count(distinct(left(reverse(msg_id),6)))/count(1) as ind6,
count(distinct(left(reverse(msg_id),7)))/count(1) as ind7
from table_a;
選擇=6的時候 即索引長度為6
使用了反轉函式 因為前面幾位是相同的,所以在建表的時候將資料反寫存進去,取得時候使用reverse反取一下即可
mysql 建字首索引 MySQL 字首索引
檢視出現頻率 select count as cnt,city from sakila.city demo group by city order by cnt desc limit 10 1.select count distinct city count from sakila.city dem...
mysql 字首索引 語法 MySQL 字首索引
索引字首 使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 必須為索引指定字首長度。例如 col name n nblobtext create table test blob col blob,ind...
mysql 字首索引 語法 mysql字首索引
應用場景 資料庫裡有個位址 address 字段,型別為varchar 100 業務決定了要經常根據address來進行查詢。確定選擇性 sql select count distinct address count as selectivity from info selectivity 0.87...