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会自动生成主键索引
唯一、全文、空间索引分别添加关键词unique\fulltext\spatial 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 关闭自动提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值