这个查询如何建立索引?

taoyb 2008-09-22 11:58:14
主表 material_in_main ,子表 material_in_list 用 material_in_no 关联

查询语句如下:

两个表的索引应该如何建立会比较快呢?

SELECT m.in_date,m.material_in_no,m.store_no,l.part_no
FROM MATERIAL_IN_MAIN M INNER JOIN MATERIAL_IN_LIST L
ON M.MATERIAL_IN_NO=L.MATERIAL_IN_NO
WHERE M.IN_DATE>=@VDATE_S AND M.IN_DATE<=@VDATE_E AND STORE_NO=@VSTORE_NO and part_no=@vpart_no
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2008-09-22
  • 打赏
  • 举报
回复
IN_DATE建聚集索引,如已存在時
create index IX_MATERIAL_IN_MAIN on MATERIAL_IN_NO(MATERIAL_IN_NO,store_no,IN_DATE)
,沒有聚集索引時把IN_DATE單獨建聚集
create index IX_MATERIAL_IN_LIST on MATERIAL_IN_NO(MATERIAL_IN_NO,part_no)
zheninchangjiang 2008-09-22
  • 打赏
  • 举报
回复
考虑重复的几率.其他不用考虑
昵称被占用了 2008-09-22
  • 打赏
  • 举报
回复
如果字段归属没猜错

先建立
MATERIAL_IN_LIST (STORE_NO,part_no)
测试
再建立
MATERIAL_IN_MAIN (IN_DATE)
测试

索引到底哪个好是需要反复测试的,因为选择索引与数据量,查询的参数都有关系
taoyb 2008-09-22
  • 打赏
  • 举报
回复
增加的索引,要把material_in_no 加在前面吗 ?
昵称被占用了 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taoyb 的回复:]
那 material_in_no 单号呢,不用建立吗 ?
[/Quote]

material_in_no是主键吧?
我估计material_in_no是主表的主键,也是从表的主键的第一个字段。(大部分主从表这样设置,所以没再说明)
增加的两个索引分别在‘主表和从表,一次查询只会其中一个起主要作用,具体选择哪个,哪个效率高,需要看数据两和参数值的分布情况,也就是需要测试
taoyb 2008-09-22
  • 打赏
  • 举报
回复
那 material_in_no 单号呢,不用建立吗 ?
spark_cao 2008-09-22
  • 打赏
  • 举报
回复
建在日期上

重复最少的列
qinhl99 2008-09-22
  • 打赏
  • 举报
回复
把你的where 里的条件设成组合索引就可以了

22,207

社区成员

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

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