mysql 索引表达式_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、索引列不能是表达式或函数的一部分

你可能感兴趣的:(mysql,索引表达式)