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只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。

  • 相关阅读:
    JS 心得总结
    zk 隐藏网页文件后缀
    zk label控件内容换行
    ZK 代码自动提示
    zk 获取session,request,servletContext,response
    zk回车事件
    zk jquery的使用
    zk listbox 点击列标题实现排序功能
    Django框架学习----视图与模板(最新文章实现)
    Django框架学习----视图与模板(分页功能)
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/14060653.html
Copyright © 2011-2022 走看看