Пытаясь улучшить этот запрос - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь улучшить производительность по этому запросу.Что я могу сделать, чтобы оптимизировать его?

SELECT * FROM bldng 
WHERE bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%' 
OR bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500

Ответы [ 5 ]

1 голос
/ 27 марта 2012

Похоже, вы пытаетесь выбрать разные категории зданий. Я бы предложил поместить столбец bldng_category в таблицу bldng. Таким образом, вы можете использовать простые запросы, такие как:

ВЫБРАТЬ * ОТ здания ГДЕ bldng_category в ('PTR', 'FACILITY_B', 'FACILITY-B') И area_sqf> 500

1 голос
/ 27 марта 2012

Из-за префикса с подстановочными знаками вы собираетесь выполнить полное сканирование bldng.Если вы можете удалить префикс подстановочного знака и добавить индекс для bldng_type, ваша производительность должна значительно возрасти.имея %text% медленно

1 голос
/ 27 марта 2012

Поскольку вы используете '% search string%', два знака процента на концах нарушают индекс этих столбцов. Вместо этого будет лучше использовать полнотекстовый индекс. Если вам нужна реальная производительность и точность, вы можете использовать поисковую систему Lucene или Sphinx.

0 голосов
/ 27 марта 2012

Индексирование area_sqf и указание только нужных столбцов вместо использования * может помочь.

0 голосов
/ 27 марта 2012

Если вы используете SQL Server, вы можете использовать Таблица подсказок (ссылка MSDN) . NOLOCK распространен.

...