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

    一、 什么是索引

         索引是对数据库表中的一列或多列的值进行排序的一种数据结构。 

         索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要的内容,mysql在300万条记录性能就下降了,虽然mysql官方文档说达500万~800万,所以当数据达到几百万的时候,那么索引就很有必要了。

         当表中有大量记录的时候,若要对表进行查询,第一种就是就需要把表中的记录全部取出来,在和查询条件一一对比,然后返回满足条件的记录、这样做就会大大消耗数据库系统的时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到    符合查询条件的索引值,最后通过保存在索引中ROWID(相当于页码)快速找到表中的记录。

     

    二、 SQL语句

    1. 创建表时创建索引

        CREATE TABLE table_name[filed_name data type]

        [unique|fulltext][index|key][index_name](filed_name[length])[asc|desc]

        语句说明:

        unique|fulltext为可选参数,分别表示唯一索引、全文索引

        index和key为同义词,两者作用相同,用来指定创建索引

        filed_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择

        index_name指定索引的名称,为可选参数,如果不指定,默认filed_name为索引值

        length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度

        asc或desc指定升序或降序的索引值存储

    1. 直接创建索引
      CREATE [unique|fulltext][index|key][index_name] ON table (filed_name[length])
    2. 修改表结构的方式添加索引
      ALTER TABLE table_name ADD[unique|fulltext][index|key][index_name] ON (filed_name[length])
    3. 删除索引
      DROP INDEX index_name ON table_name
       

    三、 索引的分类

      Index:普通索引,数据可以重复

      Fulltext:全文索引,用来对大表的文本域(char,varchar,text)进行索引

      注意:全文索引只有MyISAM支持,不过在mysql5.6后Innodb也支持了

      Unique:唯一索引,要求所有记录都唯一

      primary key:主键索引,也就是在唯一索引的基础上相应的列必须为主键

     

    四、 索引的方式

        对于BTREE和HASH索引,当使用=、<=>、IN、IS NULL或者IS NOT NULL操作符时,关键元素与常量值的比较关系对应一个范围条件。Hash索引还有一些其它特征:它们只用于使用=或<=>操作符的等式比较(但很快)。优化器不能使用hash索引来加速ORDER BY操作。(该类索引不能用来按顺序搜索下一个条目)。MySQL不能确定在两个值之间大约有多少行(这被范围优化器用来确定使用哪个索引)。如果你将一个MyISAM表改为hash-索引的MEMORY表,会影响一些查询。只能使用整个关键字来搜索一行。(用BTREE索引,任何关键字的最左面的前缀可用来找到行)。

    对于BTREE索引,当使用>、<、>=、<=、BETWEEN、!=或者<>,或者LIKE ‘pattern’(其中 ‘pattern’不以通配符开始)操作符时,关键元素与常量值的比较关系对应一个范围条件。

    “常量值”系指:查询字符串中的常量、同一联接中的const或system表中的列、无关联子查询的结果、完全从前面类型的子表达式组成的表达式。

     

    五、 建立原则

      1. 在经常用作过滤器的字段上建立索引;

      2. 在SQL语句中经常进行GROUP BY、ORDER BY的字段上建立索引;

      3. 在不同值较少的字段上不必要建立索引,如性别字段;

      4. 对于经常存取的列避免建立索引;

      5. 用于联接的列(主健/外健)上建立索引;

      6. 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定;

     

    六、 索引的缺点

    1. 虽然索引大大的提升了查询的速度,同时也降低了对表的增删改的速度,因为更新表,不仅要保存数据,还要保存索引文件
    2. 建立索引会占用磁盘空间。一般不太严重,如果你在一个大表上创建多种组合索引,索引文件会增长很快索引只是提高效率的一个因素,如果有大数据量的表,就要花时间研究建立最优秀的索引,或优化查询语句
  • 相关阅读:
    convert image to base64 and post to RESTful wcf
    在android webview实现截屏的手动tounchmove裁剪图片
    How to use jquery ajax and android request security RESTful WCF
    using swfUpload in asp.net mvc
    using HttpClient and sending json data to RESTful server in adroind
    ODP.NET数据访问
    android image watermark
    解决国内不能访问github的问题
    idapro权威指南第二版阅读笔记第九章 交叉引用和绘图功能
    idapro权威指南第二版阅读笔记第二章 逆向和反汇编工具
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/14989666.html
Copyright © 2011-2022 走看看