• 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. 建立索引会占用磁盘空间。一般不太严重,如果你在一个大表上创建多种组合索引,索引文件会增长很快索引只是提高效率的一个因素,如果有大数据量的表,就要花时间研究建立最优秀的索引,或优化查询语句
  • 相关阅读:
    数据结构化与保存
    爬取基础2
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    爬虫基础
    中文词频
    使用docker搭建rabbitmq集群
    centos安装rabbitmq
    git查看仓库地址以及修改远程仓库
    网易云邮箱账号
    jmeter提取登录cookie实现跨线程组保持登录
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/14989666.html
Copyright © 2020-2023  润新知