0
我有一个包含3-400k条目的表。索引对多个where子句的影响SQL
我想要做ABCDEFABCDEFAB. (= A, = AB..)
前缀检查我已经索引创建 table.IDX:在列的非唯一性哈希索引:
TYPE
INFORMATION
MATCH_PATTERN
MATCH_TYPE
我注意到SQL请求低于不使用索引已创建。 是这样吗?有关这方面的任何文件?
SELECT COUNT(*)
FROM table
WHERE table.type = 'TYPE'
AND table.info = 'INFO'
AND table.match_type = 'Prefix'
AND (table.match_pattern like 'ABCDEFABCDEFAB%' OR
table.match_pattern = 'ABCDEFABCDEFAB' OR
table.match_pattern = 'ABCDEFABCDEFA' OR
table.match_pattern = 'ABCDEFABCDEF' OR
table.match_pattern = 'ABCDEFABCDE' OR
table.match_pattern = 'ABCDEFABCD' OR
table.match_pattern = 'ABCDEFABC' OR
table.match_pattern = 'ABCDEFAB' OR
table.match_pattern = 'ABCDEFA' OR
table.match_pattern = 'ABCDEF' OR
table.match_pattern = 'ABCDE' OR
table.match_pattern = 'ABCD' OR
table.match_pattern = 'ABC' OR
table.match_pattern = 'AB' OR
table.match_pattern = 'A');
create table aTable (
SERIAL INTEGER,
NAME CHAR(30),
TYPE CHAR(32),
INFORMATION CHAR(32),
MATCH_PATTERN CHAR(40),
MATCH_TYPE TINYINT,
primary key (SERIAL),
foreign key (NAME) references nameTable(name));
create unique index NS.IDX
ON aTable(NAME, TYPE, INFORMATION, MATCH_PATTERN, MATCH_TYPE);
尝试切换您的索引列的顺序是非常重要的。 'TYPE,info,MATCH_TYPE,MATCH_PATTERN'。 “信息”的名称也不同于查询中的名称。 – Igor
只是一个简短的问题:有多少记录不符合上述标准?因为如果它不是太多或不超过所有原始数据的50-60%,那么查询优化器将选择一个表扫描。 – Gabor
请提供'DDL +执行计划' – Devart