查询语句如下:
这是带order by语句的
declare @d datetime
set @d=getdate();
with cte as(select SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',500)as k on QStandID=k.[key] inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID)select * from (select distinct top 1000 * from cte order by QStandTypeID asc)t;
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
结果如图所示:
结果有36条。 下面是不带order by和distinct语句
declare @d datetime
set @d=getdate();
with cte as(select SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',1000)as k on QStandID=k.[key] inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID)select * from (select top 1000 * from cte )t;
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
结果如下图所示:
结果有533行 总结了问题的根源是时间都耗费在了order by语句上面,问题关键是我有另外一张表跟这张的结果一模一样,数据19000条
这个表的数据是9000条,那个表加了order by语句查询也1秒钟不到,这个表数据更少但不知道为何耗时15秒 我检测了这两张表的logical readers,差不多。 求指点很急!!!!!
这是带order by语句的
declare @d datetime
set @d=getdate();
with cte as(select SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',500)as k on QStandID=k.[key] inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID)select * from (select distinct top 1000 * from cte order by QStandTypeID asc)t;
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
结果如图所示:
结果有36条。 下面是不带order by和distinct语句
declare @d datetime
set @d=getdate();
with cte as(select SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',1000)as k on QStandID=k.[key] inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID)select * from (select top 1000 * from cte )t;
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
结果如下图所示:
结果有533行 总结了问题的根源是时间都耗费在了order by语句上面,问题关键是我有另外一张表跟这张的结果一模一样,数据19000条
这个表的数据是9000条,那个表加了order by语句查询也1秒钟不到,这个表数据更少但不知道为何耗时15秒 我检测了这两张表的logical readers,差不多。 求指点很急!!!!!
select top 1000 SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName
from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',1000)as k on QStandID=k.[key]
inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID
order by
最开始我的语句也没用到ctedeclare @d datetime
set @d=getdate();
select distinct SZ_QStandType.QStandTypeID,SZ_QStandType.QStandTypeName from SZ_QStand inner join containstable(SZ_QStand,(QStandFRContent,QStandGRContent),'(" 测量")',5000)as k on QStandID=k.[key] inner join SZ_QStandType on SZ_QStand.QStandTypeID=SZ_QStandType.QStandTypeID order by SZ_QStandType.QStandTypeID
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 但是貌似用cte效率更高。 你的这个语句查询出来没有进行distinct操作,不是我想要的结果 谢谢你的回答呢
select * from
(select distinct top 1000 * from cte order by QStandTypeID asc)t;select * from (select top 1000 * from cte )t;
一个要排序,另一个只要取前1000个,当然时间有大差别了(因为你的公用表达式比较复杂,而且还用了全文索引)
2.就你这两句来看,看上去有点奇怪,为什么不这样写呢:select distinct top 1000 * from cte order by QStandTypeID ascselect top 1000 * from cte而要强行加一个子查询呢?
select * from
(select distinct top 1000 * from cte order by QStandTypeID asc)t;select * from (select top 1000 * from cte )t;这个查询语句不是你写的吗?
我单独测试了我的全文索引所需时间,一秒不到,就是加上order by之后就变很慢, 我去掉order by 留distinct,也一样很慢,我估计distinct的执行方法和order by 方法差不多。
噗,我知道是我写的呢。 但这样没有任何意义呢,这里的top1000只是象征性的加上去的,查询的结果还是得看全文缩影里面那个500,我限定查询结果只有500 这里只是测试呢。