今天,边肖将与你分享一个关于如何正确添加索引到Mysql的介绍。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友一起看看吧。
这里先简单介绍一下索引:
添加索引是为了提高数据库查询的性能。指数是最便宜的东西。你不需要增加内存,改变程序,或者调整sql。只要执行正确的create index,查询速度可能会提高百倍千倍。这很诱人,但天下没有免费的午餐。查询速度的提高是以insert update delete的速度为代价的。而且索引大小一般是数据的三分之一,再加上索引还得加载到内存中。如果对所有字段都进行索引,会以牺牲内存为代价,所以需要适当增加索引。
这里简单介绍一下mysql中常用索引:
在添加索引之前,最好检查表中已经存在哪些索引:从表名显示索引;
1、主键索引
注意:一个表中只能有一个主键索引,但可以添加多个索引,如唯一索引、公共索引和全文索引。
主键索引:一般在建表时添加,比如id通常是主键索引加自动增量。
建表后添加主键索引:alter table table _ name添加主键(列名);
主键索引的特点:不能为空,不能唯一。
2、普通索引
创建公共索引:alter table table _ name add index name(column 1,column 2);
3、唯一索引
创建唯一索引:alter table ` table _ name ` add unique(` column `);
唯一索引和主键索引的区别:
唯一索引:可以有多个空值,但数据内容不能重复。
主键索引:不能为空,内容只能唯一。
两者的区别在于主键索引不能为null,唯一索引可以有多个null,其余都一样。
4、全文索引
全文索引仅对MyISAM有效(InnoDB在mysql5.6之后也支持全文索引)[5.7不支持MyISAM]
全文索引主要用于文本文件,如文章和标题。
创建表时创建全文索引:
创建表格` article `(
` id ' int(10)unsigned NOT NULL AUTO _ INCREMENT,
` title ' varchar(200)默认为空,
“内容”文本,
主键(` id `),
全文关键字` title` (`title`,`content `)
)engine=MyISAM(5.6以后InnoDB也支持全文索引,5.7不支持MyISAM引擎)默认CHARSET=utf8
在现有表中创建全文索引:
ALTER TABLE article ADD full text INDEX full text _ article(标题,内容);
创建全文索引后,还有一些需要注意的地方:
众所周知,模糊查询在数据库中使用like关键字,例如:
Select * from文章,其中类似“%查询字符串%”的内容;
那么,我们是以同样的方式使用全文索引吗?不,当然,我们必须使用唯一的语法来用全文索引进行查询。例如,我们希望在文章表的标题和内容列中完全搜索指定的查询字符串。我们可以编写如下SQL语句:
select * from article where match(title,content) against('查询字符串');
强注:MySql自带的全文索引只能搜索英文,目前不能搜索中文。如果需要对包括中文在内的文本数据进行全文检索,就需要使用Sphinx /Coreseek技术对中文进行处理。
注意:目前在使用MySql自带的全文索引时,如果查询字符串的长度过短,将得不到想要的搜索结果。MySql全文索引中的默认最小单词长度是4个字符。此外,如果查询字符串包含停用字词,停用字词将被忽略。
如果可能的话,请尽量在创建全文索引之前创建一个表并插入所有数据,而不要在创建表的时候直接创建全文索引,因为前者比后者效率更高。
Delete index sql语句:alter table table _ name drop index name;
通过上面的简单介绍后,那么应该在哪些字段上添加索引呢?
1.应该为经常查询的字段创建索引。
2.更新非常频繁的字段不应该被索引。
3.唯一性差的字段(如性别字段)不应被索引。
4.不应索引不会出现在where条件之后的字段。
如果满足以下条件,则应创建索引:
1.经常被查询的字段和经常出现在where条件之后的字段应该被索引。
2.您可以为不经常更新的字段创建索引。
索引使用的注意事项
1.对于创建的多列索引,只要查询条件中使用了最左边的列,一般都会使用该索引。
例如,我们为标题、内容添加了一个复合索引。
select * from table_name,其中title=' test将使用索引
select * from table_name,其中content=' test将不使用索引。
2.对于使用like的查询,如果查询是“% a”,将不使用索引,而like“a %”将使用索引。不能在开头使用%和_等更改值。
3.如果条件中有或,即使其中有条件索引也不会使用。
4.如果列类型是字符串,请确保在条件中引用数据。
检查索引的用法:显示类似“handler _ read%”的状态;
Handler_read_key:这个值越高越好。它越高,使用索引查询它的次数就越多。
Handler_read_rnd_next:这个值越高,查询效率越低。
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。