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

    一般来说索引可以分为普通索引,主键索引,全文索引,唯一索引和空间索引。

    1 添加索引

    a 创建表时添加

        CREATE  TABLE  
         table_name [col_name data_type]    
        [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name [length]...) [ASC | DESC]
    

    注意:
    1. 创建表时指定primary key会自动生成主键索引
    唯一、全文、空间索引分别添加关键词uniquefulltextspatial index
    普通索引直接用index可以进行指定
    2. 创建索引时mysql会自动进行排序,通过asc和desc可以指定升序还是降序排列
    3. 创建全文索引时必须指定myisam存储引擎
    b 对已有表添加索引

        alter table来添加索引
      ALTER TABLE tbl_name  
        ADD {INDEX|KEY} [index_name] (index_col_name,...)
      | ADD [CONSTRAINT [symbol]] PRIMARY KEY(index_col_name,...)
      | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name](index_col_name,...)
      | ADD FULLTEXT [INDEX|KEY] [index_name](index_col_name,...)
      | ADD SPATIAL [INDEX|KEY] [index_name](index_col_name,...)
    
        使用create index来创建
        CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
        ON tbl_name (index_col_name,...)
    

    2 查询索引

        主要有三种方法
            desc table_name;
            show index from table_name;
            show indexes from table_name;
            show keys from table_name;
    

    3 删除索引

        有两种方法
            ALTER TABLE tbl_name
                DROP PRIMARY KEY
              | DROP {INDEX|KEY} index_name
    
            DROP INDEX index_name ON tbl_name
    

    4 修改索引

    先删除,再重新创建
    

    5 索引的代价

    1. 磁盘占用
    2. 对dml(delete, update, insert)语句会有影响
    

    6 索引使用的限制

    1. 对于使用like和regexp的查询,首字符不能为通配符
    2. where条件里使用了!= 则不会使用索引
    3. where条件里使用了函数,索引也会失效
    4. 如果条件中有or语句,则必须要所有的部分都是索引;因此尽量少使用or语句
    5. 如果列类型是字符串,则一定要讲数据用引号引起来,否则不适用索引
    6. 如果mysql估计全表扫描比使用索引快则不会使用索引。
    

    7 查看索引使用的情况

        show status like 'Handler_read%';
        Handler_read_key值越高说明索引使用率越高
        Handler_read_rnd_next值说明不适用索引的查询量
    

    8 大批量插入数据时索引的影响

    对于MyISAM引擎:
    alter table table_name disable keys;
    loading data//insert...;
    alter table table_name enable keys;
    对于Innodb:
    1. 将要导入的数据按照主键排序
    2. set unique_checks=0关闭唯一性校验
    3. set autocommit=0 关闭自动提交
  • 相关阅读:
    P4556 [Vani有约会]雨天的尾巴
    [模拟赛20180809] 旅程
    【jzoj3464】秀姿势
    【noip2013】火柴排队
    做运动
    【noip2013】花匠
    【noip2016】愤怒的小鸟
    【bzoj4326】【noip2015】运输计划
    作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
    自我介绍
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5217303.html
Copyright © 2011-2022 走看看