USE [xxx] GO CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[Company] ([CompanyType],[Status]) INCLUDE ([ID],[CompanyName],[HtmlUrl])
嗯,创建了几个索引后,Reads,降了挺多的 “row_number的时候里面有order语句。这会导致数据重新排序”,想了很久,不知道这么问这个问题了 解决这个问题,用索引是最直接的吗? 比如:需要用row_number产生自动行号,又不影响性能 ------------ 你看我这种SQL语句,就是我这边老出问题的,可优化的地方会是在哪呢? 除了您说的办法,创建索引,后面我取消了表的order by 排序,reads降了部分,此外这语句设计上有什么问题吗?
SELECT DISTINCTTOP (18) v.ID,v.MarketName,v.HtmlUrl,ROW_NUMBER() OVER (order by NEWID())as RowNumber FROM ( SELECT TOP(50) v.ID,v.MarketName,v.HtmlUrl FROM Market AS v INNER JOIN Market AS m ON v.ParentID=m.ID WHERE v.Status>=3 AND v.IsMarket=0 AND m.BusinessType=1 AND m.Status>=3 AND m.MarketType<>4 --ORDER BY v.ID DESC UNION SELECT TOP(20) v.ID,v.MarketName,v.HtmlUrl FROM Market AS v INNER JOIN Market AS m ON v.ParentID=m.ID WHERE v.Status>=3 AND v.IsMarket=0 AND m.BusinessType=1 AND m.Status>=3 AND m.MarketType<>4 --ORDER BY v.Status DESC,v.ID DESC ) AS v --ORDER BY RowNumber ASC
[其他解释]
好奇怪,我很多查询语句带了order by 之后,好像会全表扫描,即便加索引也是这样,这怎么办? [其他解释] 我在那除数据之后,在程序逻辑代码里面用linq排序,这算不算得上是个解决办法呢? [其他解释] 我从数据库读取想要的数据之后,在程序逻辑代码里面用linq排序,这算不算得上是个解决办法呢? [其他解释] 学习
[其他解释]
order by ,distinct都不是个好东西 [其他解释] order by 本来就会造成全表扫描 [其他解释] 现在正在看有关索引的资料,这个有用,以后再看看。 [其他解释] 这得根据实际情况来使用排序。。。。 [其他解释]