您的位置:首页 > 数据库 > MySQL

mysql前缀索引

2015-09-03 13:36 801 查看
mysql前缀索引

建立前缀索引的例子:
# 语法
ALTER TABLE table_name ADD KEY(column_name(prefix_length));

# 示例
ALTER TABLE city ADD KEY(cityname(7));


应用场景:

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

address来进行查询。 www.2cto.com

确定选择性:

Sql代码

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

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

| Selectivity |

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

| 0.8745 |

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

<address>选择性很好,但是长度为100,对整个字段建立索引显然不合适,可以考虑建立

前缀索引,例如<left(address,5)>,看看其选择性: www.2cto.com

Sql代码

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

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

| Selectivity |

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

| 0.5981 |

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

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

选择性: www.2cto.com

Sql代码

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

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

| Selectivity |

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

| 0.8239 |

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

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

前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDER BY和GROUP BY

操作,也不能用于Covering index(即当索引本身包含查询所需全部数据时,不再访问

数据文件本身)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: