Оглавление
Об авторах
Предисловие
Почему нужно прибегать к рефакторингу?
Рефакторинг доступа к базе данных
Как устроена эта книга
Аудитория
Допущения, сделанные в этой книге
Используемые в книге обозначения
Использование примеров кода
Комментарии и вопросы
Благодарности

Глава 1. Оценка

Простой пример
Настройка SQL, традиционный способ
Припудривание кода
Настройка SQL заново
Рефакторинг, первая точка зрения
Рефакторинг, вторая точка зрения
Сравнение и комментарии
Выбор среди различных подходов
Оценка возможных выигрышей
Выяснение, что делает база данных
Анализ собранного материала

Глава 2. Проверка работоспособности

Статистика и проблемы с данными
Доступная статистика
Ловушки для оптимизатора
Обзор индексирования
Краткий обзор типа индексации
Детальное исследование
Индексы, которые нарушают правила
Синтаксический разбор и связующие переменные
Как определить проблемы синтаксического разбора
Оценка потерь производительности из-за синтаксического разбора
Разрешение проблем синтаксического анализа
Что, если одно значение должно быть привязано несколько раз?
Разрешение проблем синтаксического анализа для ленивых
Правильный подход к разрешению проблем синтаксического анализа
Обработка списков в подготовленных операторах
Групповые операции
Управление транзакциями

Глава 3. Пользовательские функции и представления

Пользовательские функции
Усовершенствование чисто вычислительных функций
Дальнейшее усовершенствование функций
Усовершенствование функций поиска
Усовершенствование функций против переписывания операторов
Представления
Для чего нужны представления
Сравнение производительности со сложными представлениями и без них
Рефакторинг представлений

Глава 4. Концепция тестирования

Генерирование тестовых данных
Размножение строк
Использование функций генерирования случайных значений
SQL server и функции генерирования случайных значений
Подгонка под существующие распределения
Генерирование большого числа строк
Целостность на уровне ссылок
Генерирование случайного текста
Сравнение альтернативных версий
Блочное тестирование
Приближенное сравнение
Сравнение таблиц и результатов
Ограничения сравнения

Глава 5. Рефакторинг операторов

Планы исполнения и директивы оптимизатора
Анализ медленного запроса
Идентификация базового запроса
Приведение в порядок фразы from
Рефакторинг базового запроса
Анализ составных частей
Устранение повторяющихся шаблонов
Игры с подзапросами
Ранняя активизация фильтров
Упрощение условий
Другие направления оптимизации
Перестроение исходного запроса
Вложенные циклы
Соединение слиянием и хеш-соединение

Глава 6. Рефакторинг задач

SQL-мышление
Использование SQL там, где SQL работает лучше
Рассчитывайте на успех
Реструктуризация кода
Объединение операторов
Введение управляющих структур в SQL
Избавление от функции count()
Избегайте излишеств
Избавляйтесь от циклов

Глава 7. Рефакторинг потоков и баз данных

Реорганизация обработки
Борьба за ресурсы
Изолирование опасных зон
Параллелизм вашей программы и СУБД
Потрясая основы
Сортировка строк
Разбиение таблиц
Изменение столбцов

Глава 8. Как это работает: практика рефакторинга

Можете ли вы взглянуть на базу данных?
"Мертвые" запросы
Все эти быстрые запросы
Не бывает явно "плохих" запросов
Пора заканчивать

Приложение A. Сценарии и примеры программ
Приложение B. Инструменты
Программы mklipsum и lipsum
Как собрать программы mklipsum и lipsum
Как использовать программы mklipsum и lipsum
Roughbench
Как собрать программу Roughbench
Как использовать программу Roughbench
Вывод