SqlServer索引创建疑问

lxljw1314 2014-12-21 03:06:28
select a,b,c,..... from table where flag=1 and date>=‘2014-01-01’
因为表数据记录有上亿多条,想按时间范围分开查询,给日期建了聚集索引,那有时候条件里还有flag=1这种情况,还需要给flag这个字段再建个非聚集索引么?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另,如果我想换个列重建聚集索引,用ssms删除再新建和用命令重建有什么区别么?
我看帮助文档都是写的命令加参数方式,不知道跟ms有什么不同
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxljw1314 2014-12-22
  • 打赏
  • 举报
回复
@Tiger_Zhao, 这样建的话,where条件的顺序无所谓么?我看很多文档里说这个顺序不同也会直接影响效率
Tiger_Zhao 2014-12-22
  • 打赏
  • 举报
回复
CREATE CLUSTERED INDEX IX_table_date
ON [table](date)
INCLUDE (flag)
WITH (DROP_EXISTING = ON)

这样单独按 date 或同时用 date,flag 条件都可以用到索引。
lxljw1314 2014-12-22
  • 打赏
  • 举报
回复
flag的值分类就是0,1,2,具体每个值对应多少记录这个还没检索出来。。。
發糞塗牆 2014-12-22
  • 打赏
  • 举报
回复
flag的可能值有多少?用命令建索引最好,SSMS的方式会不同
lxljw1314 2014-12-22
  • 打赏
  • 举报
回复
我的数据主要是费用信息,同一个id或者同一个flag或者同一个日期都是有多条记录的,我自己在本地测试,看执行计划,如果不加索引的时候,它会给出提示让创建非聚集索引,然后有个include,包含了所有需要查询的列,如果在实际环境中也让我include所有列,也要按照它的提示改么?怎么根据实际情况决定应该给哪些加呢。。。比较迷惑
Tiger_Zhao 2014-12-22
  • 打赏
  • 举报
回复
通常应该是无所谓的。
为了防止不同版本有差异,那就按相同的次序写好了。
Neo_whl 2014-12-21
  • 打赏
  • 举报
回复
聚集索引添加在值唯一的字段上效率较高,flag字段可以添加非聚集索引,可以考虑两者加个混合索引,具体还要看你的查询计划,通过测试比较 通过客户端改和命令应该没有区别吧

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧