Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 25

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 161 >> Следующая


¦ Указание строк, возвращенных после доступа к таблице.

Если условие требует получения столбцов, содержащихся в таблице, но не в индексе, сервер баз данных не может применить условие до тех пор, пока не считает строки таблицы. Фильтры, которые применяются к таблице, не имеют никакого значения с точки зрения сокращения стоимости обращения к строкам таблицы. Однако они сокращают себестоимость, так как исключенные строки возвращать не требуется. Если фильтруемая таблица — не последняя и не единственная, к которой идет обращение, любой фильтр также сокращает стоимость соединений с другими таблицами позднее в плане выполнения.

Селективность фильтра

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

51

Селективность фильтра с единственным условием. Доля строк таблицы, удовлетворяющая единственному условию на эту таблицу.

Селективность фильтра с несколькими условиями. Доля строк таблицы, удовлетворяющая комбинации условий, которые относятся только к этой таблице.

Независимость фильтров. Предположение, обычно верное, что селективность нескольких условий можно вычислять просто как произведение долей, характеризующих селективности с единственным условием. Например, условие на имя человека и условие на почтовый индекс человека логически независимы. Можно предположить, что доля строк, в которых содержатся подходящие имя и почтовый индекс, будет приблизительна равна произведению доли строк с подходящим именем и доли строк с подходящим индексом. Например, если 1/100 строк содержит желаемое имя и 1/500 строк — желаемый почтовый индекс, то селективность фильтра с несколькими условиями будет равна 1/100 х 1/500 = 1/50 000.

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

Настраивая запрос и оценивая селективность фильтра, начните с вопроса, является ли запрос одиночным или же он представляет целую группу запросов. Во втором случае задайтесь вопросом о распределении значений внутри группы. Например, рассмотрим запрос1:

SELECT ... FROM Orders WHERE Dnpa1d_F1ag='Y’:

Мы надеемся, что у этого запроса высокая селективность, так как условие будет выполняться для небольшой доли полной истории заказов. Если вы рассчитываете, что при выполнении запроса для Unpaid_Fl ад значения ' Y' будут найдены, то, возможно, захотите индексировать этот столбец. Если же этот запрос является частью группы, которая так же часто выполняет поиск с не очень селективным условием Unpaid Flag=1N', то лучше будет избежать индексирования. В этом примере значение поля имеет особый смысл в запросе, оно управляет назначением запроса в целом (найти счета, требующие отправки), поэтому вы можете рассчитывать на то, что найдете в основном запросы по ' Y', которое является редким значением.

ПРИМЕЧАНИЕ-----------------------------------------------------------------------

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

1 Обратите внимание, что в примерах список в операторе SELECT я обычно заменяю троеточием. Оказывается, список выбираемых вами столбцов и выражений не имеет особого влияния на производительность запроса, которая в основном зависит от списка таблиц во фразе FROM и условий во фразе WHERE.
52

2. Основы доступа к данным

Чтобы подсчитать селективность условия UnpaidJrIag-1Y', начните с выполнения следующих двух запросов:

SELECT COUNK*) FROM Orders WHERE Unpaid Flag-'Y':

SELECT C0UNT(*) FROM Orders:

Селективность условия равна результату первого оператора, поделенному на результат второго.

Теперь рассмотрим запрос SELECT ... FROM Order_Details WHERE 0rder_ID-:1d:

Конечные пользователи будут запрашивать детальную информацию о заказах, разбросанных в таблице случайным образом. Это можно предположить даже с учетом того, что приложение заменяет параметр :id фактическим значением — ведь приложению нет смысла всегда обращаться к одному и тому же заказу. Запрос по любому идентификатору He может существовать сам по себе, он представляет целое семейство запросов, которое следует рассматривать и настраивать как единое целое. Конечные пользователи с одинаковой вероятностью могут обратиться к любому заказу, поэтому вычислять селективность фильтра следует так:
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100