浅谈mysql——索引

一、索引的含义:索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。

二、索引的作用:使用索引可以快速查找出在某个或多个列中有一特定值的行,所有Mysql列类型都可以被索引,对相关列使用索引是提高查询操作的最佳途径。

三、索引的分类:

    1.普通索引和唯一索引

    普通索引:是Mysql中的基本索引类型,允许在定义索引的列中插入重复值和空值。

    唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。在设计表时,表的主键会被创建为主键索引,主键索引就是一种特殊的唯一索引,不允许有空值。

    2.单列索引和组合索引

    单列索引:即一个索引只包含单个列,一个表可以有多个单列索引。

    组合索引:在表的多个字段组合上创建的索引,只有在查询条件中使用了组合字段最左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合。

    3.全文索引

    全文索引的类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引只在CHAR、VARCHAR、TEXT类型的列上创建。Mysql中只有MyISAM存储引擎支持全文索引。

    4.空间索引

    空间索引是对空间数据类型的字段建立的索引,Mysql有4种类型的空间索引,分别是GEOMETRY、POINT、LINESTRING和POLYGON。Mysql使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类似的语法创建空间索引。创建空间索引的列,必须将其声明为not null,空间索引只能在存储引擎为MyISAM的表中创建。

四、索引的设计原则

    1.索引并非越多越好,一个表中如有大量的索引,不仅占用磁盘空间,而且会影响insert、delete、update等语句的性能,因为当表中的数据更改的同时,索引也会进行调整和更新。

    2.避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。

    3.数据量少的表最好不要使用索引。

    4.在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如,性别字段只用男、女两个不同值,因此不要在此字段上建立索引

    5.当唯一性是某种数据本身的特征时,指定唯一索引。

    6.在频繁进行排序或分组(即进行group by 或 order by 操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。

五、使用索引查询的特殊情况

    1.使用like关键字的查询语句:在使用like关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不会起作用。只用“%”不在第一个位置,索引才会起作用。

    2.使用多列索引的查询语句:一个索引可以包括16个字段。对于多列索引,只有查询条件中使用了这些字段中第1个字段时,索引才会被使用。

    例如:

CREATE INDEX index_id_price ON fruits(f_id,f_price); //在表fruits上创建一个组合索引

select * from fruits where f_id='12'; //此条查询会使用组合索引index_id_price
select * from fruits where f_price=5.2; //此条查询不会使用组合索引index_id_price
    3.使用or关键字的查询语句:查询语句的查询条件中只有or关键字,且or前后的两个条件中的列都是索引时,查询中才使用索引。否则,查询将不使用索引。


猜你喜欢

转载自blog.csdn.net/huxiaodong1994/article/details/80246749
今日推荐