环境:SqlServer2008R2
表名:member,其中有三个列a,b,c
复合索引1:on member(a,b)
复合索引2:on member(b,c)
查询语句:select top 10 * from member where b='yes'
从执行计划看,上面这个查询语句走的却是复合索引1,而不是走复合索引2
表名:member,其中有三个列a,b,c
复合索引1:on member(a,b)
复合索引2:on member(b,c)
查询语句:select top 10 * from member where b='yes'
从执行计划看,上面这个查询语句走的却是复合索引1,而不是走复合索引2
解决方案 »
- 求一查询语句
- 速求一个insert 语句
- 开启SQLServer服务管理器时,提示SQLUNIRL.dll找不到... 不能开启SQLServer服务管理器,怎么回事啊!?
- 我想在t表格里再插入一个@id的字段,应该加在哪里啊??
- 求高手帮忙,看看这个触发器为啥有时触发,有时没反应,对不起了,有点长,我没分拉
- 我的问题只能用select * from tablename where bm in('1011','1533','1535',......) order by bm吗?这样太慢了,查询总是超时!
- 急需解决
- 大量数据,用数据库好,还是重新设计一种算法用来存储和查找?()
- 查询问题,在线等待!给出解决思路即可。
- 求一条SQL语句,急!
- sql新手,基础题有人帮看下我做的对吗,谢谢了
- 16位转换64位
那么就顺带求助一下大佬,为何它会走聚集索引扫描,而不走IX_kd_querytask_wlzt_checknum呢?
select top 10 * from kd_querytask where wlzt='dcx'
800万左右其实走不走索引, 不是由索引决定, 而是由 sqlserver 来决定。
不是你建立了索引, sqlserver 就非得用。sqlserver决定用不用索引, 用哪个索引, 取决于它认为哪种方式消耗更小。打个比方:
你是护士学校的校长, 学校里 99% 是女生, 学校有花名册(索引)上面写着学生及性别。
现在集合开大会,你要想随便找 10 个女生出来, 是看花名册快, 还是随便在台下点10个人更快?回到你那个问题:
select top 10 * from kd_querytask where wlzt='dcx'你想着sqlserver 为什么不走 wlzt 这个索引对不对?
其实你首先要查一下比例:SELECT wlzt,COUNT(1) AS cnt
FROM kd_querytask
GROUP BY wlzt
ORDER BY cnt DESC