数据库是sqlserver2005,从某张表tbData中查询数据并排重 select ID,flight_no,passenger_cn_name,passenger_en_name,credent_no,Flight_Time, flight_takeoff_place_code,flight_arrive_place_code from dbo.tbData where ID in (select max(id) from dbo.tbData where Flight_Date='2012/1/31 0:00:00' AND (Flight_Code='HAK' or Flight_Code='SYX') group by Passenger_EN_Name,Credent_No)上面语句执行用了2-3分钟,tbData表数据量420万,如何优化这个语句
解决方案 »
- Access的unicode編碼是哪種類型的?
- 装了SQL SERVER2005能不能再装MY SQL?
- 查询条件
- 对数据库不太了解,单位考试,以后请多多指教
- 游标不能取下一条纪录是怎么回事
- 0403161731转换成日期2004-03-16 17:31,有个什么转换函数,或者什么别方法?
- 用VC用ADO方式访问SQL SERVER和ACCESS的区别大吗?
- 寻求集中分布数据的开发方案
- 在win98,95上使用ms sql 7是否一定要有网卡?
- 关于远程拨号访问SQL
- sqlserver2005 express版如何sqlcmd连接
- sql server 2005 镜像,自动转移后,如何使用oledb的FailoverPartner连接
select a.ID,a.flight_no,a.passenger_cn_name,
a.passenger_en_name,a.credent_no,a.Flight_Time,
a.flight_takeoff_place_code,a.flight_arrive_place_code
from dbo.tbData a,
(select max(id) ID from dbo.tbData
where Flight_Date='2012/1/31 0:00:00'
AND (Flight_Code='HAK' or Flight_Code='SYX')
group by Passenger_EN_Name,Credent_No)b
where a.id=b.id
1、or是全盘扫描
2、select max(id) ID from dbo.tbData
where Flight_Date='2012/1/31 0:00:00'
AND (Flight_Code='HAK' or Flight_Code='SYX')
也造成效率低,能否从临时表来替换表变量
2、select max(id) ID from dbo.tbData
where Flight_Date='2012/1/31 0:00:00'
AND (Flight_Code='HAK' or Flight_Code='SYX')
也造成效率低,能否从临时表来替换表变量
可以考虑
select max(id) ID into #T from dbo.tbData
where Flight_Date='2012/1/31 0:00:00'
AND (Flight_Code='HAK' or Flight_Code='SYX')
create index index_name on #T(ID)go
然后再关联试下既然你想到了
不妨可以试下
能否给个完整的例子,这条语句估计都要执行很久啊?
where Flight_Date='2012/1/31 0:00:00'
AND (Flight_Code='HAK' or Flight_Code='SYX')
create index index_name on #T(ID)
读的时候用未提交读隔离级别
或者查询时候用nolock表提示
看到你sql语句里的三字码,我自己都想跳
CREATE NONCLUSTERED INDEX IX_Include_data ON tbFlight_data_chengxing (Flight_Date,Flight_TakeOff_Place_Code) <-- 组合索引用于做 Flight_Date='2012/1/31 0:00:00' AND Flight_TakeOff_Place_Code='HAK' 这个查询的优化
INCLUDE (Passenger_EN_Name,Credent_No,ID) <-- 覆盖 Passenger_EN_Name,Credent_No,ID 列,用于 group 和 ID查询和Max函数操作的优化
查询语句如下:SET STATISTICS IO ON
SET STATISTICS TIME ONselect a.ID,a.flight_no,a.passenger_cn_name,
a.passenger_en_name,a.credent_no,a.Flight_Time,
a.flight_takeoff_place_code,a.flight_arrive_place_code
from dbo.tbFlight_data_chengxing a,
(select max(id) ID from dbo.tbFlight_data_chengxing
where Flight_Date='2012/1/31 0:00:00'
AND (flight_arrive_place_code='HAK' or flight_arrive_place_code='SYX')
group by Passenger_EN_Name,Credent_No)b
where a.id=b.idSET STATISTICS IO OFF
SET STATISTICS TIME OFF执行时间在8-10秒之间