数据库索引连环问
添加索引的方式
/* 主键索引 */
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
/* 唯一索引 */
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
/* 普通索引 */
ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) /* 一列 */
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) /* 多列 */
/* 全文索引 */
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )索引的优点?
- 创建唯一性索引,保证数据库表中每一行数据的唯一性。
- 大大加快数据的检索速度,这是创建索引的最主要的原因。
- 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
- 通过使用索引,可以在查询中使用优化隐藏器,提高系统的性能。
- 加速数据库表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
索引的缺点?
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
- 索引需要占用物理空间,除了数据表占用数据空间之外,每一个索引还要占一定的物理空间,如果建立聚簇索引,那么需要的空间就会更大。
- 当对表中的数据进行增加、删除和修改的时候,索引也需要维护,降低数据库维护的速度。
使用索引的注意事项?
- 在经常需要搜索的列上,可以加快搜素的速度。
- 在经常使用在 WHERE 子句中的列上面创建索引,可以加快条件的判断速度。
- 在经常需要排序的列上创建索引,因为索引已经排序,这样查询时可以利用索引的排序,加快排序查询时间。
- 对于中到大型表素引都是非常有效的,但是特大型表的话维护开销会很大,不适合建索引。
- 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。
- 避免 where 子句中对字段使用函数,这会造成索引无效。
- 在使用 innoDB 时使用与业务无关的自增主键作为主键,即使用逻辑主键,而不要更用业务主键。
- 将打算加索引的列设置为 NOT NULL,否则将导致引擎放弃使用索引而进行全表扫描。
- 删除长期未使用的素引,不用的索引的存在会造成不必要的性能损耗 MySQL 5.7 可以通过查询 sys 库的chema_unused_indexes 视图来查询哪些素引从未被使用。
- 在使用 limit offset 查询缓慢时,可以借助素引来提高性能。
索引是如何提高查询速度的?
使用哈希表或 BTree 数据结构存储索引,相当于将无序的数据变成相对有序的数据,可以加快查询速度。
索引相关内容可见:MySQL索引.pdf