【发布时间】:2012-06-05 21:35:42
【问题描述】:
我们有一个从主从简单模式中检索一些数据的查询。 WHERE 子句如下所示:
-- These are just random numbers
Where ticket.type_id in ( 2, 3, 4, 5, 7 ) and
(
ticket.color_id is null or
ticket.color_id in ( 1, 2 , 8 )
)
我们已经在列中有索引:ticket.type_id 和 ticket.color_id,无论如何,QUERY EXPLAIN ANALYZE 仍然向我们显示 Postgresql 正在进行顺序扫描以满足查询。
这个查询在系统中非常重要且经常出现,所以我们想专门为这种情况创建一个索引。
什么索引可以解决这种情况?
【问题讨论】:
-
如果你只做
Where ticket.type_id in ( 2, 3, 4, 5, 7 )会使用索引吗? -
它可能认为对表进行顺序扫描比为 IN 子句中的每个 ID 重新扫描索引要快。除非表非常大并且指定的
type_ids 是数据的一小部分,否则可能是对的。 -
在这种情况下,是一个大表(数百万条记录),有什么额外的想法吗?
-
你能把
EXPLAIN粘贴到Where ticket.type_id in ( 2, 3, 4, 5, 7 )吗? -
请提供整个查询。难道只是一个简单的
WHERE?有HAVING吗?ORDER BY?LIMIT?连接了多少张表?
标签: database performance postgresql indexing profiling