MYSQL索引

MySQL索引是什么

新华字典的  目录  相对于字典中的  内容  就类似于数据库的  索引  类似于数据库中  数据  。

MySQL索引有什么用

像上述描述一样,目录是为了快速便捷查找内容,索引也一样。加快数据检索速度

当然看待事物都是辩证性的,有优点就有缺点。

加上目录意味着要多用一些纸,分类越多消耗越多(按拼音、部首、偏旁等)。加上目录的前提下如果要在字典里新增/删除/修改一个字,对应的目录是不是也要调整。同理,索引也一样:

建立索引会占用磁盘空间的索引文件;

降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。

MySQL索引分类

  • 单列索引
    • 主键索引:列的值不允许重复,不允许有空值,如常见的id。一个表只能有一个主键。
    • 唯一索引:列的值不允许重复,允许有空值
    • 普通索引:最基本的索引,char和varchar可以指定length建立前n个字符的索引,blob和text类型必须制定length。
    • 全文索引:只有在char、varchar、text使用,用来查找文本中的关键字,配合match against操作。
  • 组合索引:多个列组合成的索引。使用时遵循最左前缀集合。
#普通索引
建表时:index indexname(‘字段名‘(length))
建表后:create index indexname on ’tablename’(‘字段名’(length))
Alter table tablename add index indexname(‘字段名‘(length))

#唯一索引 建表时:unique index indexname(‘字段名‘(length)) 建表后:create unique index indexname on ’tablename’(‘字段名’(length)) Alter table tablename add unique index indexname(‘字段名‘(length))
#主键索引 primary key
#全文索引 建表时:fulltext index indexname(‘字段名‘(length)) 建表后:create fulltext index indexname on ’tablename’(‘字段名’(length)) Alter table tablename add fulltext index indexname(‘字段名‘(length)) 使用:select * from tablename where match(column1,column2) against(‘xxx’,’sss’,’ddd’);查找column1column2中含xxx,sss,ddd的记录

#组合索引
建表时:index indexname(‘字段名‘(length),‘字段名‘(length))
建表后:create index indexname on ’tablename’(‘字段名’(length),‘字段名‘(length))
Alter table tablename add index indexname(‘字段名‘(length),‘字段名‘(length)

索引删除

drop index indexname on tablename

 

索引失效情况

 1、条件中使用了or

除非每个or的条件都建索引

2、遵循最左前缀规则

3、使用范围查询。以%、<、>开头或使用,其右边所有列无法使用索引

4、列类型为字符串,查询的数据必须用引号引起来,否则不使用索引

5、索引列不能是表达式或函数的一部分

上一篇:2020-11-25


下一篇:OFD文件如何打开,转换PDF,打印及导出数据