Поделиться

Рефакторинг SQL приложений

Обзор и концепция усовершенствования кода.

Фаро С., Паскаль Л. «Рефакторинг SQL приложений» Символ-Плюс, 2009 год, 336 стр., ISBN: 978-5-93286-145-5; O’reilly (4,21 мб. pdf)

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

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

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

Оглавление книги

Содержание

1. Оценка
Простой пример
Настройка SQL, традиционный способ 25
Припудривание кода 28
Настройка SQL заново 30
Рефакторинг, первая точка зрения 30
Рефакторинг, вторая точка зрения 35
Сравнение и комментарии 37
Выбор среди различных подходов 40
Оценка возможных выигрышей 42
Выяснение, что делает база данных 49
Запрос динамических представлений 49
Добавление операторов в файл трассировки 54
Использование файлов трассировки 56
Анализ собранного материала 58

2. Проверка работоспособности 61
Статистика и проблемы с данными 62
Доступная статистика 62
Ловушки для оптимизатора 67
Экстремальные значения 67
Временные таблицы 69
Обзор индексирования 69
Краткий обзор типа индексации 71
Детальное исследование 73
Индексы, которые нарушают правила 79
Индексы на основе битовых карт 79
Кластерные индексы 80
Индексы по выражениям 81
Синтаксический разбор и связующие переменные 81
Как определить проблемы синтаксического разбора 82
Оценка потерь производительности из-за синтаксического разбора 84
Разрешение проблем синтаксического анализа 88
Что если одно значение должно быть привязано несколько раз? 90
Разрешение проблем синтаксического анализа для ленивых 91
Правильный подход к разрешению проблем синтаксического анализа 92
Обработка списков в подготовленных операторах 94
Передача списка как одной переменной 95
Пакетная обработка списков 98
Использование временной таблицы 99
Групповые операции 100
Управление транзакциями 102

3. Пользовательские функции и представления 105
Пользовательские функции 106
Усовершенствование чисто вычислительных функций 107
Дальнейшее усовершенствование функций 110
Усовершенствование функций поиска 118
Пример 1: календарная функция 119
Пример 2: функция конвертирования валют 127
Усовершенствование функций против переписывания операторов 135
Представления 136
Для чего нужны представления 136
Сравнение производительности со сложными представлениями и без них 137
Рефакторинг представлений 144
Alt-txt

4. Концепция тестирования 148
Генерирование тестовых данных 149
Размножение строк 150
Использование функций генерирования случайных значений 151
SQL Server и функции генерирования случайных значений 152
Подгонка под существующие распределения 156
Генерирование большого числа строк 160
Целостность на уровне ссылок 164
Генерирование случайного текста 165
Сравнение альтернативных версий 167
Блочное тестирование 167
Приближенное сравнение 168
Сравнение таблиц и результатов 169
Что сравнивать 169
Примитивные способы сравнения 170
Сравнение SQL, версия из учебника 172
Сравнение SQL, версия получше 174
Сравнение контрольных сумм в SQL 175
Ограничения сравнения 182

5. Рефакторинг операторов 183
Планы исполнения и директивы оптимизатора 184
Анализ медленного запроса 190
Идентификация базового запроса 190
Приведение в порядок фразы from 192
Рефакторинг базового запроса 195
Анализ составных частей 196
Устранение повторяющихся шаблонов 196
Игры с подзапросами 203
Подзапросы в списке select 203
Подзапросы во фразе from 206
Подзапросы во фразе where 206
Ранняя активизация фильтров 209
Упрощение условий 211
Другие направления оптимизации 214
Упрощение агрегатов 214
Использование фразы with 214
Комбинирование операторов объединения 215
Перестроение исходного запроса 216
Вложенные циклы 216
Соединение слиянием и хеш-соединение 217

6. Рефакторинг задач 219
SQL-мышление 220
Использование SQL там, где SQL работает лучше 221
Рассчитывайте на успех 222
Реструктуризация кода 225
Объединение операторов 226
Введение управляющих структур в SQL 226
Использование агрегатов 227
Использование функции coalesce()вместо if. . .is null 228
Использование исключений 229
Извлечение всех нужных данных за один прием 234
Изменение логики 235
Избавление от функции count() 236
Избегайте излишеств 244
Избавляйтесь от циклов 245
Причины использования циклов 248
Анализ циклов 250
Сомнительные циклы 251

7. Рефакторинг потоков и баз данных 255
Реорганизация обработки 256
Борьба за ресурсы 257
Время обслуживания и интенсивность входного потока 258
Усиление параллелизма 259
Размножение поставщиков услуг на уровне приложения 261
Укорачивание критических разделов 269
Изолирование опасных зон 270
Работа с несколькими очередями 271
Параллелизм вашей программы и СУБД 278
Потрясая основы 281
Сортировка строк 283
Разбиение таблиц 286
Изменение столбцов 288
Изменение содержимого 288
Разбиение столбцов 289
Добавление столбцов 290
Материализация представлений 291

8. Как это работает: практика рефакторинга 294
Можете ли вы взглянуть на базу данных? 294
«Мертвые» запросы 296
Все эти быстрые запросы 298
Не бывает явно «плохих» запросов 300
Пора заканчивать 301

A. Сценарии и примеры программ 302
B. Инструменты 312
Программы mklipsum и lipsum 312
Как собрать программы mklipsum и lipsum 312
Как использовать программы mklipsum и lipsum 312
Roughbench 315
Как собрать программу Roughbench 315
Как использовать программу Roughbench 315
Файл roughbench .properties 315
Указание параметров 316
Генерирование переменных 317
Генерирование целых чисел или чисел с плавающей запятой 317
Генерирование дат 317
Вывод 318
Алфавитный указатель 320

СкачатьPDF


Поделиться