DIYBYPERL 发表于 2011-11-17 15:28

怎么让in用上索引呢?

SELECT sum(-fd5) AS T, fd1,fd3 ,fd4
FROM temp
WHERE fd2 IN ('104','105','120','140','141','142','143','159','161','163','165', '167', '169','181','855','856','857','858','862','866','867','883','892','893','895','719','721','171','896')
GROUP BY fd1,fd3,fd4

andkylee 发表于 2011-11-17 16:09

能否用上索引,看你怎么建立索引了。

ase引擎生成抽象计划的时候会将in转化成or,对于or的每个值会进行相应的扫描。
针对你给出的sql,in列表中的很多可选值很可能会让ase引擎选择表扫描。
建议:建立f2,fd1,fd3,fd4,fd5上的组合索引,检查是否能用上。
还有,使用此组合索引与表扫描的代价也需要考虑。

Eisen 发表于 2011-11-18 08:58

强制index scan试试?

DIYBYPERL 发表于 2011-11-18 15:03

回复 3# Eisen

怎么强制 了?

Eisen 发表于 2011-11-18 15:56

select .... from tb1 (index ind_on_tb1)

DIYBYPERL 发表于 2011-11-21 11:16

回复 5# Eisen

谢谢
页: [1]
查看完整版本: 怎么让in用上索引呢?