Я написал этот запрос:
INSERT INTO KeysTable (KeyText, Id)
SELECT KeyText as BKT, KeysTable.ID as CID FROM KeysTable
INNER JOIN StatTable ON KeysTable.ID = StatTable.Key_ID
WHERE StatTable.StatCommandCode = 4 AND
EXISTS (SELECT 1 FROM StatTable WHERE StatCommandCode = 4 AND StatTable.Key_ID = CID);
Я знаю, что удаление условия
AND StatTable.Key_ID = CID
сделает запрос очень быстрым.Также, если я заменю его на
AND StatTable.Key_ID = 444 // (444 - random static number)
, запрос тоже будет очень быстрым.Оба столбца в этом условии индексируются:
CREATE INDEX IF NOT EXISTS StatsIndex ON StatTable (Key_ID);
, а в KeysTable столбец ID является первичным ключом.Почему индекс не улучшает производительность в этом случае?
Спасибо за ответы и извините за мой плохой английский: (.