MySQL的索引类型及简单优化
2015-07-31 11:25
603 查看
摘要 MySQL在应用层面上的四大索引:普通索引
index, 唯一索引 unique index, 主键索引 primary key, 组合索引 的基本理解,添加 删除
index unique index primary key 索引 mysql
普通索引:index,单字段/多字段,可存在多个,列值or组合列值无限制
唯一索引:unique index,单字段/多字段,可存在多个,列值or组合列值不可重复,但可以为NULL的重复,因为NULL值的记录不会被添加到索引.....
主键索引:primary key,单字段/多字段,唯一性,列值or组合列值不可重复
组合索引:当普通/唯一/主键为多字段时,即为追寻左前缀匹配的组合索引,其他限制根据各自特性自行理解
InnoDB要5.6以上才可支持
全文索引:fulltext index,单字段/多字段,可存在多个,列值or组合列值无限制,但列属性必须为char,varchar,text类型,查询使用 where match(column_name) against('keywords')
普通索引
添加索引
?
添加索引
?
删除索引
?
唯一索引
作为此索引的列不允许有重复的列值
注意:单字段则字段值不可重复,空字符串也不可以,但可以为NULL
多字段组合模式则组合的值不可重复,但可以为NULL的组合
?
?
删除索引
?
主键索引
主键索引具有唯一性(注意,此唯一性是说整个表的primary key只能存在一个,但primary key 可以为多字段型),其他的普通索引 唯一索引 组合索引可以存在多个相同类型的索引
注意:单列值或组合列值不可重复,且不可以为NULL
?
删除主键索引时要确保此键不为自增类型(auto_increment)
?
组合索引
组合索引为多个字段共同建立,追寻作左前缀模式:
index_name(name, sex, age)
可以使用
where name = 'name'
where name = 'name' and sex = 'f'
where name = 'name' and sex = 'f' and age >= 25
不可以使用
where sex = 'f'
where age >= 25
where sex = 'f' and age >= 25
最左前缀模式 like操作仅在 like 'xxxx%'模式下有效,'_xxx%', '%xxxx%'无效
?
?
?
全文索引
添加索引
?
添加索引
?
删除索引
?
索引优化
1、索引支持 < <= = => > between in 不支持 not in <>
2、索引不会包含有NULL值的列
3、使用like操作时只有在第一位不为通配符时索引才会启动
4、使用短索引,varchar(50)则视情况而定取前几位即可
5、不要在列值上计算,where year(addtime) < 2015 优化为 where addtime < 2015-01-01
index, 唯一索引 unique index, 主键索引 primary key, 组合索引 的基本理解,添加 删除
index unique index primary key 索引 mysql
普通索引:index,单字段/多字段,可存在多个,列值or组合列值无限制
唯一索引:unique index,单字段/多字段,可存在多个,列值or组合列值不可重复,但可以为NULL的重复,因为NULL值的记录不会被添加到索引.....
主键索引:primary key,单字段/多字段,唯一性,列值or组合列值不可重复
组合索引:当普通/唯一/主键为多字段时,即为追寻左前缀匹配的组合索引,其他限制根据各自特性自行理解
InnoDB要5.6以上才可支持
全文索引:fulltext index,单字段/多字段,可存在多个,列值or组合列值无限制,但列属性必须为char,varchar,text类型,查询使用 where match(column_name) against('keywords')
普通索引
添加索引
?
?
?
唯一索引
作为此索引的列不允许有重复的列值
注意:单字段则字段值不可重复,空字符串也不可以,但可以为NULL
多字段组合模式则组合的值不可重复,但可以为NULL的组合
?
?
主键索引
主键索引具有唯一性(注意,此唯一性是说整个表的primary key只能存在一个,但primary key 可以为多字段型),其他的普通索引 唯一索引 组合索引可以存在多个相同类型的索引
注意:单列值或组合列值不可重复,且不可以为NULL
?
?
组合索引
组合索引为多个字段共同建立,追寻作左前缀模式:
index_name(name, sex, age)
可以使用
where name = 'name'
where name = 'name' and sex = 'f'
where name = 'name' and sex = 'f' and age >= 25
不可以使用
where sex = 'f'
where age >= 25
where sex = 'f' and age >= 25
最左前缀模式 like操作仅在 like 'xxxx%'模式下有效,'_xxx%', '%xxxx%'无效
?
全文索引
添加索引
?
?
?
索引优化
1、索引支持 < <= = => > between in 不支持 not in <>
2、索引不会包含有NULL值的列
3、使用like操作时只有在第一位不为通配符时索引才会启动
4、使用短索引,varchar(50)则视情况而定取前几位即可
5、不要在列值上计算,where year(addtime) < 2015 优化为 where addtime < 2015-01-01
相关文章推荐
- [MySQL] MySQL将多条记录的某个字段合并成一条记录
- Mysql常见水平分表方案
- mysql分表与分区表
- 快速安装及配置MySQL Replication双主节点集群--及改变数据保存目录
- mysql 数据库还原出错ERROR:Unknown command '\' mysql中断
- 用jdbc连接mysql数据库(基础篇)
- 定时器mysql自动备份脚本
- Mysql 启动运行
- Mysql常用命令详解
- Mysql分表准则
- Mysql数据库主从及主主复制配置演示
- heartbeat+DRBD+mysql+LVS集群实战
- MySQL修改root密码的多种方法
- mysql查询当天、本周、上周、本月、上月信息
- [MySQL FAQ]系列 — 怎么计算打开文件数
- MySQL怎么计算打开文件数
- mysql数据库主从及主主复制配置演示
- MYSQL主从安装与配置
- MySQL索引与Index Condition Pushdown
- 使用Hibernate向mysql数据库中插入中文,数据库中显示??乱码