加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zhanzhang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

数据库调优中如何解决like %str 时索引不被运用

发布时间:2022-01-13 14:23:36 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关数据库调优中如何解决like %str 时索引不被使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 索引 1. 解决like%str不使用模糊查询的4种方法 上一讲最后说了,只要模糊查
        这篇文章将为大家详细讲解有关数据库调优中如何解决like ’%str’ 时索引不被使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
 
索引
 
1.      解决like’%str’不使用模糊查询的4种方法
 
      上一讲最后说了,只要模糊查询的模糊值在字符串前面,则不会使用索引,‘%aaa’和‘_aaa’都不会!
 
如下
 
      应该说这是Mysql给程序员们开的一个玩笑。要是我的表数据量很大,而且又需要使用like’%%’这样的模糊查询来检索时,该怎么办??
 
接下来,笔者将会给大家分享解决这个问题的四种方法!
 
1)    Select主键
 
只要Select的字段刚好是主键,那么就会使用到索引(只对innodb数据库有效)
 
比如下面的
 
select idfrom emp where ename like '%haha%'G
 
就使用了索引
 
select * from empwhere ename like '%haha%'G
 
则不使用索引
 
除了主键,其他字段必须设置为覆盖索引才能使索引生效,不能单独设置索引
 
比如下面这种是不会使用索引的
 
可以采用分步查询的方法,先select主键再利用主键去找其他字段。不过好像比较麻烦!别怕!接下来会讲一种最优方法——覆盖索引法!
 
2)    覆盖索引法
 
覆盖索引是一种特殊的多列索引,当多列索引指向一个查询语句中所有的字段时,该多列索引就被称为覆盖索引。
 
使用覆盖索引可以解决问题!
 
创建覆盖索引
 
当然,如果你想要select很多字段甚至是select*,那你可以创建一个多列索引指向所有字段(innodb可以不指向主键)
 
注意:
 
笔者发现,当覆盖索引指向的字段是varchar(380)及380以上的字段时,覆盖索引会失效!
 
3)    全文索引法
 
此方法有较大局限。
 
全文索引,只对MyISAM引擎有用。主要是针对对文件,文本的检索, 比如文章或者段落,.
 
它会把某个数据表的某个数据列出现过的所有单词生成一份清单
 
少于3个字符的单词不会被包含在全文索引里,可以通过修改my.cnf修改选项
 
ft_min_word_len=3
 
但是!
 
全文索引不完全等同于模糊查询
 
比如title字段有这么个数据’abcd20088ccaa’,使用模糊查询select * from articles wheretitle like’%2008%’可以查找到,而使用全文检索select * from articles where match(title) against(‘2008’);是检索不到的,因为2008不是一个单词!
 
4)    使用全文检索引擎工具包
 
采用lucene、Sphinx、solr等专门的全文检索开源工具可以检索某段字符串。
 
关于数据库调优中如何解决like ’%str’ 时索引不被使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读