索引的分类及创建索引的语法

索引的分类:

索引的类型和添加语法:
  • 唯一索引(unique key):为了避免数据重复出现

    # 下面在 tb_student 表中的 id 字段上建立名为 index_id 的索引,SQL语句如下:
    # 使用CREAT创建索引:
    CREATE UNIQUE INDEX index_id ON tb_student(id);
    # 使用ALTER创建索引:
    ALTER TABLE `tb_student` ADD UNIQUE [index_id](`id`);
    
  • 主键索引(primary key):唯一且非空,只能有一个列作为主键

    通常使用primary key关键字,不能使用create index语句创建主键索引

    # 在tb_student表中的id字段创建名为index_id的主键索引,sql如下:
    # 使用ALTER创建索引:
    ALTER TABLE `tb_student` ADD PRIMARY KEY [index_id](`id`);
    
  • 普通索引(key /index):加快了对数据的访问速度

    # 下面在 tb_student 表中的 id 字段上建立名为index_id 的索引,SQL语句如下
    # 使用CREAT创建索引:
    CREATE INDEX index_id ON tb_student(id);
    # 使用ALTER创建索引:
    ALTER TABLE `tb_student` ADD INDEX [index_id](`id`);
    
  • 组合索引:两个或者多个列上的索引被称作组合索引,又称做联合索引

    # 在 tb_student 表中的column1,column2,...等列上面创建联合索引:sql如下
    CREATE INDEX index_name ON tb_student(column1,column2,...)
    # 还可以添加成为组合要求的唯一索引
    CREATE UNIQUE INDEX index_name ON tb_studentb(column1,column2,...)
    
  • 前缀索引:

    # 在 table_name 表中的column_name列上面添加前缀长度为length,引索名为title_pre的前缀索引:sql如下
    # 使用CREATE创建索引
    CREATE INDEX index_name ON tb_student(column1(length));
    # 使用ALERT创建索引
    ALTER TABLE table_name ADD INDEX title_pre(column_name(length));
    
  • 全文索引:对文本的内容进行搜索(主要用来查找文本中的关键字,只能在char,varchar或者text类型的列上创建)全文索引允许在列中插入重复值和空值

    # 在tb_student表中的info字段上建立名为index_info的全文索引,sql如下:
    # 使用CREATE创建索引:
    CREATE FULLTEXT INDEX index_info ON tb_student(info);
    # 使用ALTER创建全文索引:
    ALTER TABLE `tb_student` ADD FULLTEXT [index_info](`info`);
    
  • 空间索引:对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有四种:GEOMETRY(几何),POINT(点),LINESTRING(线),POLYGON(面)

删除索引的方式:
# 使用ALERT删除:(删除表table_name中的名为index_name的索引)
ALTER TABLE table_name DROP INDEX index_name;
# 使用DROP删除: (删除表table_name中的名为index_name的索引)
DROP INDEX index_name ON table_name;
创建索引的方式:
  • create index语句:

    # 添加普通索引
    CREATE INDEX index_name ON table_name(id);
    
  • create table语句:创建表的时候直接创建索引

    # 在建表的时候添加索引
    CREATE TABLE table_name(
        属性名 数据类型[完整约束条件]
        属性名 数据类型[完整约束条件],
    	...
        [ UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [indexname](属性名(length))
    )
    
  • alter table语句

    # 添加普通索引
    ALTER TABLE table_name ADD INDEX index_name(column)
    

ALTER和CREATE创建索引的区别:

  • CREATE INDEX 必须提供索引名,对于ALTER TABLE,如果你不提供索引名,将自动创建。

  • CREATE INDEX一个语句只能创建一个索引,ALTER TABLE可以创建多个

    • ALTER TABLE table_name ADD INDEX(column),ADD UNIQUE(column);
      
  • 创建主键只能使用ALTER TABLE

索引方法:

b-tree

hash

r-tree

常用索引优化策略:
  • 覆盖索引:查询的列要被所建的索引覆盖
  • 最左前缀匹配:联合索引中必须遵循”最左前缀匹配“,sql查询where条件字段必须从索引的最左前列开始匹配,不能跳过索引中的列。否者的话没法使用到索引
  • 范围查询字段放在最后:联合索引,范围查询后,后面的字段不走索引
  • 不对索引字段进行逻辑操作:在索引字段上进行计算、函数、类型转换(自动\手动)都会导致索引失效。
  • 尽量全值匹配:使用like会使查询效率降低
  • like查询,左侧尽量不要加%:like以%开头,当前列索引无效(当为联合索引时,当前列和后续列索引不生效,导致索引使用不充分);当like前缀没有%,后缀有%时,索引有效。
  • 尽量避免null:字段定义默认为null时,null索引生效,not null索引列索引均失效;字段定义为not null ,不允许为空时,null/not null索引列均失效。
  • 尽量减少使用不等于:不等于操作符是不会使用引索的,不等于操作符包括:not,<>,!=。优化方法:数值型key<>改为key>0 or key <0.
  • 字符类型务必加上单引号:varchar类型字段值不加单引号可能会发生数据隐式转化,自动转化为int型,使索引无效
  • or关键字前后尽量都为索引列:当or左右查询字段只有一个是索引时,会使索引失效。

参考:
MySQL 索引优化的 10 个策略

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值