什么是索引?
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引的优点:
1.
高效性:
利用索引可以提高数据库的查询
效率.
2.
唯一性:
索引可以确保所查的数据的唯一
性
3.完整性:用户可以加速表和表之间的连接,实现表与表之间的参照完整性
索引的缺点:
1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、
UPDATE和DELETE。
2.因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘
空间的索引文件。
3. 如果你在一个数据很多的表上创建了多种组合索引,索引文件的会膨胀很快。
MySql中有四种索引 分别为:
主键索引 :
在数据库关系图中为表定义一个主键将自动
创建主键索引。
CREATE TABLE `表名` (
`字段1` INT() AUTO_INCREMENT PRIMARY KEY,
或者 PRIMARY KEY(`字段1`)
)
一张表只能有一个
唯一索引 :
不允许具有索引值相同的行,从而禁止重复
的索引或键值。
CREATE TABLE `表名` (
`字段1` INT() NOT NULL UNIQUE,
或者 UNIQUE KEY(`字段1`)
)
一张表可以有很多个
常规索引 :
最基本的索引类型,没有
唯一性之类的限制。
CREATE TABLE `表名` (
`字段1` INT() NOT NULL,
INDEX/KEY(`字段1`)
)
一张表可以有很多个,但不宜过多,容易影响数据的增删改;
全文索引 :
搜索引擎的关键技术,用于检索文本信息,
可以是词语或者段落。
CREATE TABLE `表名` (
`字段1` VARCHAR(32) NOT NULL,,
fulltext key (字段名,字段名,字段名) with parser ngram
)ENGINE=innodb
注意:
1.Mysql 5.6
之前版本,只有
myisam
支持全文索引,
5.6
之后,
Innodb
和
myisam
均支持全文索引。
2.
只有
char
、
varchar
、
text
类型字段能创建全文索引。
3.
当大量写入数据时,建议先写入数据,后再建立全文索引,提高效率
索引失效的情况:
1、以%开头的like查询
2、数据类型出现隐式转化
3、组合索引,不满足最左原则
4、估计使用索引比全表扫描还慢
5、用or分割条件,若or前后只要有一个列没有索引
6、尽量避免使用!= 或 <>操作符,否则数据库引擎会放弃使用索引进行全表扫描。使用>或<会比较高效。
7、对字段进行null值判断:应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
8、避免select * : 在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间