我有一个在Informix数据库上有500万条记录的表。在Informix DB上使用索引(索引?)
这不是实际的表格,但会显示我遇到的问题。
表:销售
列:sale_id,sale_confirmed,VENDOR_ID,purchaser_id
指标:IDX1(sale_id),IDX2(sale_confirmed)的idx3(VENDOR_ID),idx4显式地(purchaser_id)
如果我做一个查询像这样:
select *
from sales
where sale_confirmed IS NULL
or sale_confirmed = ''
然后查询在约4或5秒内完成。
如果我不喜欢这样的查询:
select *
from sales
where vendor_id = 12345
or purchaser_id = 12345
那么查询运行完成的约4秒或5秒。
但是,如果我运行此查询(前面2个查询的组合):
select *
from sales
where (sale_confirmed IS NULL
or sale_confirmed = '')
and (vendor_id = 12345
or purchaser_id = 12345)
然后查询运行15分钟之前,我取消它。
数据库似乎不够聪明,可以串联使用不同的索引,即它似乎无法使用idx2来查找X行并在该X行内使用idx3和idx4 - 这是对的,我会认为这样做会很聪明吗?
是否有强制数据库处理WHERE子句的第二部分时使用的idx3和idx4显式地的一种方式?
任何其他解决方案都不足以创建新索引?
谢谢。
您使用的是哪个版本的IDS?你的统计数据是否足够及时?您是否使用SET EXPLAIN ON查看了查询计划? – 2011-01-06 15:02:36