赞
踩
1:模糊查询,当我们建立一个索引emp_name时,对emp_name进行模糊查询时,索引是不会生效的,因为搜索树不支持[学了数据结构就是爽]
2:or条件查询,当我们写了一个由or链接的条件语句时,当且仅当语句中存在一个或以上的字段没有建立索引时,语句中的全部索引都不会生效,这个很好理解,因为存在一个无索引字段说明我们要对整个表进行一次扫描,这个时间复杂度是o(n)的,所以o(logn / 1)的查询就变得没有必要了
3:字符字段不加双引号,这个...I don't understand
4 :mysql评估使用索引比全表扫描还慢的话,则不使用索引;
使用情景:
当我们写一个查询语句时,用到的条件语句可以对于多个索引,系统会评判索引的效率,然后选择使用哪个索引,但是有的时候我们需要指定某个索引,这个时候我们就可以用sql提示了
1:use提示
建议系统用每个索引,但是最终决策权在系统。
select 字段1,字段2... from table use(index_name) where expression
2:ignore提示
与use相反,ignore是建议系统忽略某个索引
select 字段1,字段2... from table ignore(index_name) where expression
3:force提示
强制系统使用某个索引,如果指定的索引不合法,则报错
select 字段1,字段2... from table force(index_name) where expression
首先,索引分为聚集索引和辅助索引,在B+树结构中,聚集索引中的叶子节点会存储一行的数据,辅助索引是存储对于行的聚集索引字段,当我们要查询一行的所有数据且用辅助索引时,系统会先在辅助索引中找到对应行的聚集索引的字段和辅助索引的字段,然后根据聚集索引来找到对应行数据并返回;
这里就引申出覆盖索引和回表查询的概念了,首先我们用select语句定然是要访问某些字段的,如果我们用辅助索引来查询,且查询的字段为被辅助索引中的字段和聚集索引的字段并集的子集,那么我们是不需要访问聚集索引了,因为我们需要查询的子段已经找到了,这就是覆盖查询
回表查询是“通过辅助索引找到聚集索引的字段如,然后到聚集索引找数据”的过程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。