dot*_*dot 2 mysql sql indexing
我刚发现这篇文章:
而且我有兴趣了解asaph的帖子,他说:
我不希望select*来自客户的代码如'%a%'要快,因为它不可能使用索引.必须检查每条记录.如果可能的话,考虑来自客户的select*,其中代码如'a%',因为这可能会使用索引.
有人可以解释两个选择语句之间的区别吗?我知道一个只有一个通配符,只能找到以"a"开头的东西.但为什么要将其编入索引?
虽然MySQL的B树索引的实际细节比这更复杂,但是对于大多数用途来说,它足够接近地说在列上有索引可以让MySQL引擎SELECT在你的表上执行s,就好像它是由该列排序的那样.
如果code列上有索引,并且你正在搜索记录code LIKE 'a%',那么所有MySQL(或任何其他SQL包,只要它足够聪明)必须做的是从'a开始吐出所有记录'到'b'的开头.但是,如果您在哪里搜索记录code LIKE '%a%',那么已经排序的表code将无法帮助您,因为一行是否与WHERE子句匹配,它与索引中的位置没有简单的关系.因此对于第二个查询,除了检查code表中每一行的条目的每个字符(除非它已经缓存了结果)之外,数据库无法合理地执行任何操作.
这很容易直观地理解,因为你可以想象做一些像人一样合理的事情.如果你想找到以"a"开头的牛津英语词典中的所有单词,那么你只需要经历从'a'开头到'b'开头的所有页面,你看到的一切都是一个单词以'a'开头.如果你想在字典中找到所有单词中带有'a'的单词,那么所订购的字典并不能为你提供很多帮助.如果你足够成熟,可以振振有词地利用字典的顺序一点点(如用你的知识,所有的字之前的第一个"B ......"在字典中的单词包含"A"),但最终你几乎要看每一个字.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |