mysql的几种索引及优缺点和注意事项

一、普通索引

    最基本的索引,只是加快了查询速度。

二、唯一索引

    与普通索引类似,不同的是:索引的列值必须唯一,但允许有空值,也就是null,如果是组合索引,则列值的组合必须是唯一的。

三、主键索引

    即我们常用的主键id,它是一种特殊的唯一索引,不允许有空值,一般在建表时同时创建主键索引。

特点:

    1)一张表只有一个主键索引

    2)主键要求自增

四、组合索引

    即多个字段建立的索引

五、全文索引

    fulltext

    myisam引擎支持

六、外键

建立外键需要注意的事项:

    1)表引擎必须一样

    2)字段类型必须一样

    3)长度必须一样

    4)存储范围必须一样

    5)约束字段必须在被引用的字段中出现过

索引的不足之处:

说了这么多索引的好处,但是过多的使用索引,也将暴露它的缺点:

    1)虽然索引可以大大提高数据的查询速度,但是提高查询速度的同时,将会降低INSERT、UPDATE、DELETE的速度,因为更新表时,MySQL不仅要保存数据,还要保存索引文件,这样如果索引滥用的话,就会大大降低数据库写入的速度。

    2)建立索引会占用磁盘空间,一般情况这个问题不会很严重,但是如果你在一个大表上创建了多种索引,索引文件就会大大增加。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要你花时间去建立最优秀的索引,或者优化查询语句,分表,或者分区。

使用索引时需要注意:

    1)索引不能包含有null值的列,只要有null值,都不会被包含到索引中,复合索引中只要有一列含有null值,那么这一列对于复合索引就是无效的,所以我们在数据库设计时不要把字段默认值设为null。

    2)使用短索引,对串列进行索引,如果可能应该指定一个前缀长度,如果在 前10个或者前20个字符内,多数值是唯一的,那么就不要对整列进行索引。短索引不仅可以提高查询速度,而且可以节省磁盘空间和I/O操作。

    3)索引列排序,MySQL查询只使用一个索引,因此如果where语句中已经使用了索引,那么order by中的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列创建符合索引。

    4)like语句操作,一般情况下不建议使用like,如果非用不可,可以使用aaa%”,这样可以用到索引。其他情况用不到索引。

    5)不要在列上进行运算,这将导致索引失效而造成全局扫描。如:

    select * from users where YEAR(adddate)<2007;

    可以修改为:

    select * from users where adddate<‘2007-01-01’;

    6)不要使用not in<> 操作    





展开阅读全文

没有更多推荐了,返回首页