У меня очень простой запрос, который дает неожиданные результаты. Советы по устранению неполадок приветствуются.
Упрощенно, запрос:
SELECT Obs.obsDate,
Obs.obsValue,
ObsHead.name
FROM ml.Obs Obs
JOIN ml.ObsHead ObsHead ON ObsHead.hdId = Obs.hdId
WHERE obs.hdId IN (53, 54)
Это дает мне стоимость запроса: 963 . Однако, если я изменю запрос на:
SELECT Obs.obsDate,
Obs.obsValue,
ObsHead.name
FROM ml.Obs Obs
JOIN ml.ObsHead ObsHead ON ObsHead.hdId = Obs.hdId
WHERE ObsHead.name IN ('BP SYSTOLIC', 'BP DIASTOLIC')
Несмотря на то, что он (должен) возвращать те же данные, ориентировочная стоимость возрастает до 17688 . Где проблема здесь, вероятно, кроется? Спасибо.
Редактировать: В плане запросов говорится, что индекс для ObsHead.Name
используется для сканирования диапазона, а доступ к таблице в ObsHead стоит только 4. Существует еще один индекс для Obs.hdId
, который используется для сканирования диапазона, стоящего 94: это объединение Nested Loops между таблицами, которое увеличивается до 17K.