mysql前缀索引
2015-09-03 13:36
801 查看
mysql前缀索引
建立前缀索引的例子:
应用场景:
数据库里有个地址(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(即当索引本身包含查询所需全部数据时,不再访问
数据文件本身)。
建立前缀索引的例子:
# 语法 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(即当索引本身包含查询所需全部数据时,不再访问
数据文件本身)。
相关文章推荐
- mysql中的NULL的判断
- MySQL查询缓存设置提高MySQL查询性能
- mysql 杀掉(kill) lock进程脚本
- mysql 登陆密码错误问题
- MySQL - Show Processlist 整理(转)
- 通过mysql show processlist 命令检查mysql锁的方法
- 已解——navicat premium连接mySQL,无法连接
- MySQL存储过程之函数及元数据
- MySQL学习笔记(5) - 修改和删除数据库
- MySQL学习笔记(4) - 创建数据库
- mysql简单例子
- MySQL常用命令
- MySQL学习笔记(3) - 查询服务器版本,当前时间,当前用户
- MySQL学习笔记(2) - 修改MySQL提示符的两种方法
- MySQL学习笔记(1) - cmd登陆和退出
- 我在设置MySQL远程连接时走的弯路
- MySQL(十)之权限管理和查询缓存
- MySQL(九)之MySQL存储引擎
- MySQL(八)之锁和事务特性
- mysql 存储过程的小节