首页 > 试题广场 >

数据表建建立复合索引tab_index(“name”,”ag

[单选题]
数据表建建立复合索引tab_index(“name”,”age”),下面哪些语句能用上索引?( )
  • select*from table where age=18 and name=’test’;
  • select*from table where name=’test’and age=18;
  • select*from table where name like”%test%”and age=18;
  • select*from table where name like”%test”and age=18;
推荐
B

引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引。
对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

根据这些原则, where应该先包含name, 再包含age。
然后对于字符串的like操作 % 出现在前面的, 都需要全表扫描, 而用不上索引。
所以, 选择B
编辑于 2015-02-05 14:34:22 回复(0)
1.什么是复合索引?
    索引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作 复合索引。
2.复合索引作用
    利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。
3.例子
                    CREATE INDEX name 
                    ON employee (emp_lname, emp_fname)
复合索引的结构与电话簿类似,它首先按姓氏对雇员进行排序,然后按名字对所有姓氏相同的雇员进行排序。如果您知道姓氏,电话簿将非常有用,如果您知道名字和姓氏,电话簿则更为有用,但如果您只知道名字而不知道姓氏,电话簿将没有用处。所以复合索引,字段的先后顺序是很重要的。 列的顺序:在创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。
解析:
A,没有注意复合索引顺序
B 正确
C 凡是对索引列,使用了‘%XXX’,都不走索引。如果改为where name = 'test%'则可以走索引。

发表于 2015-09-09 14:17:12 回复(0)
其实A项也是对的。比如:
建立索引(name,cid)
所以对于你的这条sql查询:

EXPLAIN SELECT * FROM student WHERE   cid=1 AND name='小红';

没有错,而且复合索引中的两个索引字段都能很好的利用到了!因为语句中最左面的name字段进行了等值匹配,所以cid是有序的,也可以利用到索引了。

你可能会问 :我建的索引是(name,cid)。而我查询的语句是cid=1 AND name='小红'; 我是先查询cid,再查询name的,不是先从最左面查的呀?

好吧,我再解释一下这个问题:首先可以肯定的是把条件判断反过来变成这样 name='小红' and cid=1; 最后所查询的结果是一样的。
那么问题产生了?既然结果是一样的,到底以何种顺序的查询方式最好呢?

所以 ,而此时那就是我们的mysql查询优化器该登场了,mysql查询优化器会判断纠正这条sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。所以,当然是我们能尽量的利用到索引时的查询顺序效率最高咯,所以mysql查询优化器会最终以这种顺序进行查询执行。

发表于 2016-05-29 23:39:53 回复(1)

最左前缀匹配原则 mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配 ,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。where 范围查询要放在最后 (这不绝对,但可以利用一部分索引) and之间的部分可以乱序 ,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

发表于 2016-07-06 17:11:51 回复(0)
对于字符串的like操作 % 出现在前面的, 都需要全表扫描, 而用不上索引;
用到复合索引的,查询时要根据复合索引匹配。
发表于 2016-06-02 15:59:04 回复(0)
%test%,这样的需要用到全文检索(倒排索引)。B+树索引(等值、范围查询)
发表于 2015-08-19 09:24:42 回复(0)