SQL语句优化

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
请问下面的SQL 怎么优化呀?
或者能用其它的SQL达到同样的效果
SELECT ProductID FROM Product
WHERE CreateDate ='2007-07-16'
AND ProductID NOT IN(
SELECTProductID FROM Product

WHERE CreateDate <'2007-07-16')
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
不用加not in
SELECT ProductID FROM Product
WHERE CreateDate ='2007-07-16'
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SELECT ProductID
FROM Product A
WHERE CreateDate ='2007-07-16' AND NOT EXISTS(

SELECT 1 FROM Product

WHERE ProductID = A.ProductID AND CreateDate <'2007-07-16')
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
NOT EXISTS 和NOT IN 的速度差不多呀. 我現在數據表有幾萬條, 執行速度太慢了.
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
几万条算是很少的了,只要在合适的数据列上创建正确的索引,SQL Server在3百万(据统计)以下的数据量,工作还是可以的
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
可以考虑如下两种方法:
方法1:在CreateDate数据列上创建聚集索引
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
方法2:创建一张视图vtest如下:
create view vtest
as
select ProductID from Product where CreateDate = '2007-07-16'
go
然后,执行:
SELECT ProductID FROM vtest
go
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SELECT a.ProductID FROM
(SELECT ProductID FROM Product WHERE CreateDate ='2007-07-16') a
left join
(SELECT ProductID FROM Product WHERE CreateDate<'2007-07-16') b
on a.ProductID=b.ProductID
where b.ProductID is null
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
andy1995的方法不錯. 我驗證下結果再來
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
謝謝 andy1995
我開始想連接, 但沒想到 b.ProductID is null 這樣, 唉, 基本功不扎實
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行