zoukankan      html  css  js  c++  java
  • mysql索引

            索引的的创建跟存储的引擎是挂钩的,存储引擎表示不同数据在不同磁盘的不同组织形式。 

    聚簇索引与非聚簇索引:取决于数据与索引是否是放在一起的。

      例如InnoDb就是只能有一个聚簇索引但可以有很多非聚簇索引(向InnoDb插入数据的时候必须要包含一个索引的key值,而且你创建表的时候如果不设置索引,索引的key值可以是主键,这也就是你平时创建表的时候为什么最好设置一个id字段,并且设置为主键自增。如果也没有主键的话,会使用唯一键作为索引,如果还没有唯一键的话,就会自生成一个,不同的数据库不同,但生成的这个是不可见的)

    回表:

    索引覆盖:

    组合索引(最左匹配):

      平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
    –title,time
    –title
    为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示

    –使用到上面的索引
    SELECT * FROM article WHREE title=’测试’ AND time=1234567890;
    SELECT * FROM article WHREE title=’测试’;
    –不使用上面的索引
    SELECT * FROM article WHREE time=1234567890;

    索引下推(了解即可):

      

    首先来说一下索引使用是的小技巧:

    1.索引不会包含有NULL的列

           只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的。

        2.使用短索引

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

        3.索引列排序

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

        4.like语句操作

          一般情况下不鼓励使用like操作,如果非使用不可,注意正确的使用方式。like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引。

        5.不要在列上进行运算

        6.不使用NOT IN 、<>、!=操作,但<,<=,=,>,>=,BETWEEN,IN是可以用到索引的

        7.索引要建立在经常进行select操作的字段上。

           这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

        8.索引要建立在值比较唯一的字段上。

        9.对于那些定义为text、image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少。

        10.在where和join中出现的列需要建立索引。

        11.where的查询条件里有不等号(where column != …),mysql将无法使用索引。

        12.如果where字句的查询条件里使用了函数(如:where DAY(column)=…),mysql将无法使用索引。

        13.在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/14060653.html
Copyright © 2011-2022 走看看