我有一个包含超过一百万行集数据的数据库。当我执行这个查询时,需要几个小时,主要是由于pageIOLatch_sh。目前没有索引。你能建议where子句中可能的索引。我相信它应该在日期时间,因为它在哪里使用,以及如何使用哪个索引。基于日期时间字段的Where子句的索引和优化
if(<some condition>)
BEGIN
select <some columns>
From <some tables with joins(no lock)>
WHERE
((@var2 IS NULL AND a.addr IS NOT NULL)OR
(a.addr LIKE @var2 + '%')) AND
((@var3 IS NULL AND a.ca_id IS NOT NULL) OR
(a.ca_id = @var3)) AND
b.time >= @from_datetime AND b.time <= @to_datetime AND
(
(
b.shopping_product IN ('CX12343', 'BG8945', 'GF4543') AND
b.shopping_category IN ('online', 'COD')
)
OR
(
b.shopping_product = 'LX3454' and b.sub_shopping_list in ('FF544','GT544','KK543','LK5343')
)
OR
(
b.shopping_product = 'LK434434' and b.sub_shopping_list in ('LL5435','PO89554','IO948854','OR4334','TH5444')
)
OR
(
b.shopping_product = 'AZ434434' and b.sub_shopping_list in ('LL54352','PO489554','IO9458854','OR34334','TH54344')
)
)AND
ORDER BY
b.time desc
ELSE
BEGIN
select <some columns>
From <some tables with joins(no lock)>
where <similar where as above with slight difference>
请确定您正在使用哪个DBMS。你同时标记了两个 - mysql和sqlserver – CeOnSql
Microsoft SQL server 2005 – aquesh
如果你没有建立索引,我猜猜问题是联接,你没有包含在问题中。 –