Оптимизировать выбранный запрос на основе нескольких условий WHERE - PullRequest
0 голосов
/ 02 мая 2011

В настоящее время я младший разработчик, работающий над веб-приложением с бэкэндом Java / DB2, и у меня есть несколько SQL-запросов, которые выполняются довольно медленно.База данных в настоящее время не оптимизирована, поэтому определенно есть место для улучшения.Единственная проблема в том, что у меня нет опыта в этом, и никто не может мне помочь.

SomeTableName
MyPkey
ColOne
ColTwo
ColThree
ColFour
ColFive

Я пытался выяснить, как оптимизировать базу данных для таких запросов:

SELECT * FROM SomeTableName WHERE ColOne = 'some value'
SELECT * FROM SomeTableName WHERE ColOne = 'some value' AND ColTwo = 'another'
SELECT * FROM SomeTableName WHERE ColFive = 11 AND ColThree = 'hello world'
SELECT * FROM SomeTableName WHERE ColOne = 'hi' AND ColTwo = 'val1' AND ColThree = 'val2' AND ColFour = 'val3' AND ColFive = 'val4'

Я пытаюсь изобразить следующее: операторы SELECT имеют условия WHERE, которые имеют разные комбинации столбцов и значений, и я не уверен, как оптимизировать запросы, подобные этому.

Любой совет?

РЕДАКТИРОВАТЬ: Я не уверен, что DB2 добавляет свои собственные оптимизации, но наверняка нет никаких индексов настройки в любом из столбцов.

Ответы [ 3 ]

0 голосов
/ 02 мая 2011

Из вашего примера похоже, что вы уже добьетесь некоторой производительности, просто проиндексировав colOne. В основном, используйте столбцы в том же порядке, что и индекс, который вы хотите использовать.

0 голосов
/ 02 мая 2011

Вы получите приличный прирост производительности, если создадите индекс (colOne, colTwo, colThree, colFour, colFive). Запросы 1, 2 и 4 все будут использовать его.

0 голосов
/ 02 мая 2011

Вы должны определенно поиграть с индексами в вашей базе данных.Они делают вставку и обновление более дорогими, но ваши запросы будут выполняться намного быстрее, поэтому они, вероятно, в целом выигрывают.Индексы наиболее эффективны для столбцов, которые имеют большое количество значений (т. Е. Не так много для гендерного столбца).Они более эффективны для столбцов, на которые вы часто ссылаетесь в своих условиях.При тестировании индексов убедитесь, что оптимизатор запросов вашей базы данных использует их, используя глагол SQL EXPLAIN или инструмент, подобный db2expln .

...