【发布时间】:2015-04-05 15:00:58
【问题描述】:
我尝试了以下查询,以便使用 PostgreSQL 的 LIKE 运算符在四叉树内进行搜索。在col3列中,插入了'0133002112300300320'之类的词,描述了四叉树的路径。
CREATE TABLE table1
(col1 CHARACTER(9) NOT NULL,
col2 INTEGER NOT NULL,
col3 CHARACTER VARYING(64),
col4 INTEGER NOT NULL,
col5 DOUBLE PRECISION NOT NULL,
PRIMARY KEY(col1,col2,col3));
-- Performs sequential search
SELECT col1,col2,col3,col4,col5
FROM table1
WHERE col1='somevalue' AND col2=0 AND col3 LIKE '01330021123003003%';
问题是我设置的 PRIMARY KEY 索引不适用于WHERE col1='somevalue' AND col2=0 AND col3 LIKE '01330021123003003%'。如果要使用创建的索引,我似乎不能同时使用LIKE 运算符和AND 运算符。
我可以创建任何特殊索引来使SELECT 更快吗?
【问题讨论】:
-
锚定到开头的模式匹配 (
col LIKE 'foo%') 可以在数据库认为有益的情况下使用索引。您如何确定它“不起作用”? -
我发现使用
EXPLAIN。可以肯定col LIKE 'foo%'可以使用索引,但是col1 LIKE 'foo%' AND col2='baz'呢?它还能使用索引吗? -
表格有多少行?请出示解释。
-
有 1033810 行。
Seq Scan on table1 (cost=0.00..48498.61 rows=1 width=89) Filter: (((col3)::text ~~ '01330021123003003%'::text) AND (col1 = 'somevalue'::bpchar) AND (col2 = 0)) -
我试过
EXPLAIN ANALYZE和"Rows Removed by Filter: 1033804" "Planning time: 0.127 ms" "Execution time: 477.148 ms"
标签: postgresql indexing database-performance sql-like