0
私は3〜400kのエントリを含むテーブルを持っています。私は、以下のSQL要求を使用していないことに気づいた複数のwhere句に対するインデックスの影響SQL
TYPE
INFORMATION
MATCH_PATTERN
MATCH_TYPE
:列の非一意のハッシュインデックス:私はインデックスが table.IDXを作成している私はABCDEFABCDEFAB. (= A, = AB..)
の接頭チェックをしたい
インデックスが作成されました。 それは事実ですか?これに関するドキュメンテーション?
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'です。また、 'information'はクエリとは異なる名前です。 – Igor
ちょっと疑問があります:上記の基準に合致しないレコードの数はいくつですか?これは、すべてのローの50-60%を超えていないか、それほど多くない場合は、クエリオプティマイザがテーブルスキャンを選択するためです。 – Gabor
'DDL +実行計画'を提供してください – Devart