首頁 > 資料庫 > mysql教程 > mysql前缀索引_MySQL

mysql前缀索引_MySQL

WBOY
發布: 2016-06-01 13:36:16
原創
978 人瀏覽過

bitsCN.com

mysql前缀索引

 

应用场景:

数据库里有个地址(address)字段,类型为varchar(100),业务决定了要经常根据
address来进行查询。    

确定选择性:

Sql代码  

SELECT count(DISTINCT(address))/count(*) AS Selectivity FROM info;    

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

| Selectivity |    

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

|      0.8745 |    

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

 

选择性很好,但是长度为100,对整个字段建立索引显然不合适,可以考虑建立
前缀索引,例如,看看其选择性:    

Sql代码  

SELECT count(DISTINCT(left(address,5)))/count(*) AS Selectivity FROM info;    

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

| Selectivity |    

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

|      0.5981 |    

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

 

选择性还不错,但和0.8745相比还是太低,所以我们可以将前缀长度增加到10,再看看
选择性:    

Sql代码  

SELECT count(DISTINCT(left(address,10)))/count(*) AS Selectivity FROM info;    

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

| Selectivity |    

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

|      0.8239 |    

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

 

和0.8745已经很接近了,但是索引长度只有10,所以就可以决定建立前缀索引了。

前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDER BY和GROUP BY
操作,也不能用于Covering index(即当索引本身包含查询所需全部数据时,不再访问
数据文件本身)。

 

bitsCN.com
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板