SELECT top(10) A.ClientId,A.InvStatus, A.OnCurrent, A.ModifyDate ,A.InstallDate as InstallDate2
FROM II_InstallSW A
WHERE A.ModifyDate >= '2009-05-11 00:00:00' AND A.ModifyDate <= '2009-08-11 23:59:59'
order by InstallDate2 asc 数据量 600~1000万左右。由于检索需要现有索引3个
CREATE CLUSTERED INDEX [IDX_01] ON [dbo].[II_InstallSW]
(
[ClientId] ASC,
[ModifyDate] ASC,
[OnCurrent] ASC
)CREATE NONCLUSTERED INDEX [IDX_2] ON [dbo].[II_InstallSW]
(
[ClientId] ASC,
[PackageId] ASC
)CREATE NONCLUSTERED INDEX [IDX_3] ON [dbo].[II_InstallSW]
(
[ModifyDate] ASC,
[PackageId] ASC
)系统的title可以点击 点击后按照该字段排序显示 ,也就是说按照什么排序 不一定
点击其他几个字段还都好 和已有的索引沾边 大概都用上索引了 速度可以
就是点击
InstallDate,InvStatus排序的时候可能是由于没有相关索引 速度很慢 结果出不来像这样动态变化的order by 大家都怎么处理的呀给每个字段都单独建上索引是不可能的 因为程序里所有的页面都可以这样选择排序方式 难道要吧每个表每个字段都建立索引呀
FROM II_InstallSW A
WHERE A.ModifyDate >= '2009-05-11 00:00:00' AND A.ModifyDate <= '2009-08-11 23:59:59'
order by InstallDate2 asc 数据量 600~1000万左右。由于检索需要现有索引3个
CREATE CLUSTERED INDEX [IDX_01] ON [dbo].[II_InstallSW]
(
[ClientId] ASC,
[ModifyDate] ASC,
[OnCurrent] ASC
)CREATE NONCLUSTERED INDEX [IDX_2] ON [dbo].[II_InstallSW]
(
[ClientId] ASC,
[PackageId] ASC
)CREATE NONCLUSTERED INDEX [IDX_3] ON [dbo].[II_InstallSW]
(
[ModifyDate] ASC,
[PackageId] ASC
)系统的title可以点击 点击后按照该字段排序显示 ,也就是说按照什么排序 不一定
点击其他几个字段还都好 和已有的索引沾边 大概都用上索引了 速度可以
就是点击
InstallDate,InvStatus排序的时候可能是由于没有相关索引 速度很慢 结果出不来像这样动态变化的order by 大家都怎么处理的呀给每个字段都单独建上索引是不可能的 因为程序里所有的页面都可以这样选择排序方式 难道要吧每个表每个字段都建立索引呀
set @s='2009-05-11 00:00:00'
set @s2='2009-08-11 23:59:59'
SELECT top(10) A.ClientId,A.InvStatus, A.OnCurrent, A.ModifyDate ,A.InstallDate as InstallDate2
FROM II_InstallSW A
WHERE A.ModifyDate between @s and @s2
order by InstallDate2 asc
改为变量 试试我好想哪里看到过 这个变为变量放到条件加快。也许是减慢 你去试试吧
执行计划CTRL+L 看看就知道了 。。
会快点吧
InstallDate,InvStatus排序的时候可能是由于没有相关索引 速度很慢 结果出不来 那你应该可以判断是点了哪个,再用动态执行,ORDER BY 点击的那个
set @order=''if 条件1 and @order<>''
@order = 'select * from ta order by '+@order
if 条件2 and @order<>''。 exec(@order)
分区表 还不太熟悉
FROM II_InstallSW A
WHERE A.ModifyDate >= '2009-05-11 00:00:00' AND A.ModifyDate <= '2009-08-11 23:59:59'
order by InstallDate2 asc
建议楼主用动态连接成SQL,排序字段用变量来表示,用参数来传递排序字段
看这个帖子 上面有高人回答 分区表的东西
另外如果是索引的话应该建立什么的
CREATE NONCLUSTERED INDEX [IDX_3] ON [dbo].[II_InstallSW]
( [ModifyDate] ASC,
[InstallDateas] asc
)这样?建立一个测试 没什么改善呢?
( [InstallDateas] ASC,
[ModifyDate] asc
) 把两个字段换位置就好了
索引生效恩 由于不能建立聚集 所以只能非聚集了
不知道用什么好 时间好象不行 因为我的时间比较集中 还会把数据存在一个分区中
user不知道怎么样 用user的话我经常会在所有用户中搜索的 就是说要在所有分区中查找 不知道效率如何
如果还要频繁的读取数据,那么效果就更差了。
所以,建议楼主用分区表。
索引在这个时候不会起到明显的作用。如果针对时间字段的排序,数据量比较大,那么最好为分区表。