zoukankan      html  css  js  c++  java
  • Mysql的索引

      首先,表一下索引的好处。在大数据集上,不加索引直接查询结果的时间消耗要远远大于在索引上查询。索引就好比是一本书的目录。

      索引是一种特殊的文件(InnoDB数据表上索引是表空间的一个组成部分)。他们包含着对数据表里面所有记录的引用指针。举个例子,比如查询主键id = 2000000的记录。

    SELECT * FROM article WHERE id=2000000

      如果没加索引那么就会很爆炸,一般数据库默认都会为主键生成索引。

    聚簇索引、非聚簇索引

      索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的:能够提高多行的检索速度;而非聚簇索引对于单行的索引检索很快。

      举例来说,你翻到新华字典的汉字“爬”那一页就是P开头的部分,这就是物理存储顺序(聚簇索引);而不用你到目录,找到汉字“爬”所在的页码,然后根据页码找到这个字(非聚簇索引)。

      聚簇索引的唯一性:因为表结构的存储顺序只能有一个,所以物理存储只能有一个顺序。显然,这让聚簇索引变得贼拉珍贵,很关键哟。。。。

      初学者最大的误区:把主键自动设为聚簇索引。 主键可以是聚簇索引,但是如果主键无意义的自增字段,那么我们就可以简历自己想要的聚簇索引。

      我想在时间这个维度上简历聚簇索引应该会 很好使,在查找某一范围内的时间的时候,可以直接找到起始位置和终止位置。

    索引不能有包含NULL值的列

      单索引不说了,复合索引(在多列上建立的索引),只要有一列含有NULL值,那么次复合索引无效。我们可以在数据库设计的时候不要让字段的默认值为NULL

    使用短索引

      对串列进行索引,如果可能应该指定一个前缀长度,类似字典树的思想,如果一个CHAR(255)在前N个字符内,就可以唯一区别开来,那就可以不用在整个列上建立索引。

    可能导致索引失效的情况:

    like语句可能不会使用索引

      一般情况下不鼓励使用like,如果使用,需要注意: like "%abc%" 不会使用索引而 like "aaa%"可以使用索引。 Trie

    在列上进行运算

      例如,select * from users where YEAR(adddate) < 2007 将在每个行上进行运算,这将导致索引失效而进行的全表扫描。因此。可以改成: select * from users where adddate < '2007-01-01'。关于这一点可以围观:一个单引号引发的MYSQL性能损失。

    MySQL只对一下操作符才使用索引

      <,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是那么好玩的,比如我刚才针对text类型的字段创建索引的时候,系统差点就卡死了。

    .具体的.

      mysql默认使用的引擎是InnoDB引擎,InnoDB引擎底层使用的是B数结构。

  • 相关阅读:
    课堂练习四
    手头软件产品的评价
    学习进度条十
    典型用户和用户场景描述
    学习进度条九
    学习进度条八
    冲刺第十天
    冲刺第九天
    冲刺第八天
    冲刺第七天
  • 原文地址:https://www.cnblogs.com/luntai/p/6690113.html
Copyright © 2011-2022 走看看