mysql索引优缺点以及创建的时机

来源:互联网 发布:c语言中用户标识符 编辑:程序博客网 时间:2024/06/05 17:30

建立索引的优点

1、可以通过建立唯一性索引,可以保证数据库表中数据的唯一性
2、可以加快数据的检索速度
3、可以加速表与表之间的连接
4、在使用分表和排序子句进行数据检索时,可以减少查询中分组和排序的时间

建立索引的缺点

1、索引的创建之后当然需要维护,因此索引的创建和维护要耗费时间。数据量越大,需要耗费的时间也就越多
2、索引需要占用额外的物理空间
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,这样一来速度会降低。

在查询时候,如果不加索引的话很简单的一个条件可能就需要全表扫描,数据库中建立合适的索引会大大提高效率,

什么情况下适合建索引

1、在经常需要搜索的列上建索引,这样会大大加快查找速度、
2、在经常使用在where子句中的列上建索引,加快条件的判断速度。
3、在经常需要连接的列上,可以加快连接的速度。
4、在经常需要排序的列上,因为索引已经是排过序的,这样一来可以利用索引的排序,加快排序查询时间。
5、在经常需要进行范围搜索的列上,同样,因为索引是排序的,指定范围则为连续的。

实践告诉我们,建立索引可以大大提高sql的性能:http://blog.csdn.net/wj1607162253/article/details/77483558

那是不是在数据库表字段中尽量多建索引呢?肯定是不是的。因为索引的建立和维护都是需要耗时的。

什么情况下不适合建立索引

1、在查询中很少用到的列。
2、那些只有很少数据值得列,如性别。建索引不仅没有什么优势,反而会影响更新速度。
3、那些定义为text等大的字段上。因为这些列的数据量要么相当大,要么取值很少。

附:sql性能优化时候需要注意的几个地方:
1、索引的排序
mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
2、like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”可以使用索引。
3、不要在列上进行运算
select * from users where
YEAR(adddate)
4、不使用NOT IN和操作
NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id3则可使用id>3 or id