【发布时间】:2012-11-05 07:12:13
【问题描述】:
我的应用程序需要从 SQL Server 数据库中获取数据。我的问题是必须将 3 个表连接到一个视图中。这需要很长时间(生成视图大约需要 30 秒)所以我想知道是否有办法优化这个 SQL 查询?
SQL查询:
SELECT TOP (100) PERCENT Request1.RequestID,
TrackIT.dbo.Sending.Barcode,
TrackIT.dbo.Address_View.AdrID,
TrackIT.dbo.Address_View.Name,
TrackIT.dbo.Address_View.Street,
TrackIT.dbo.Address_View.HouseNo,
TrackIT.dbo.Address_View.Postal,
TrackIT.dbo.Address_View.City,
TrackIT.dbo.Address_View.Country,
Request1.Latitude,
Request1.Longitude,
Request1.ReceivedDate
FROM (SELECT DISTINCT RequestID,
Ltrim([Content]) AS Barcode,
Latitude,
Longitude,
ReceivedDate
FROM RequestWithLocation
WHERE ( Site LIKE '%Z' )
AND ( [Content] <> '' )
AND ( AddressID = '0' )
AND ReceivedDate > Dateadd(day, -7, Getdate())) AS Request1
INNER JOIN TrackIT.dbo.Sending
ON Request1.Barcode = TrackIT.dbo.Sending.Barcode
INNER JOIN TrackIT.dbo.Address_View
ON TrackIT.dbo.Sending.DeliveryAdrID = TrackIT.dbo.Address_View.AdrID
ORDER BY AdrID
谁能帮忙?
【问题讨论】:
-
好吧 - 这种情况:
(Site LIKE '%Z')肯定会杀死你所有的表现 - 因为它是LIKE和领先的%- 永远不会有索引可以使用..... -
有什么方法可以在不使用 LIKE "%Z" 的情况下从 Site 列中获取所有数据?
-
你能放弃那一个条件,看看性能是否提高了吗?
-
在运行 6 次后,3 次在查询中带有 LIKE,3 次没有。 LIKE 的 3 次需要 17 秒,没有它需要 20 到 22 秒。当我在 MS SQL 中使用 Estimate Execution Plan 函数时,两个查询得到相同的结果
-
执行计划非常庞大,我无法将其合并到一张图片中。这些表没有被索引。
标签: sql sql-server sql-server-2005 query-optimization