Вредные советы по SQL (часть 1)

advertisement
Вредные советы по SQL
Фёдор Самородов
Фёдор Самородов
• Fedor@Samorodov.ru
• http://Samorodov.SU
Страница  2
www.specialist.ru
Вредны ли вредные советы?
Вредные советы – это антишаблоны
– Распознать опасную ситуацию
– Сэкономить время
Страница  3
www.specialist.ru
Вредны ли вредные советы?
Решение сложных инженерных задач
всегда заканчиваются компромиссом.
Объём
ресурсов,
используемых
SQL-запросом
Решение должно быть
адекватно задаче.
И любой антишаблон из
тех, что мы сегодня
рассмотрим, в некоторых
обстоятельствах может
оказаться лучше любого
«правильного» решения!
Страница  4
Скорость
работы SQLзапроса
Время, затраченное
на написание, отладку
и доработку SQLзапроса
www.specialist.ru
Вредный совет №1
Используйте конструкцию
«SELECT * …»
Страница  5
www.specialist.ru
Вредный совет №1
Используйте конструкцию «SELECT * …»
• Нет необходимости вспоминать структуру таблицы
• Можно печатать гораздо меньше текста (или поставить макрос)
• Кто знает, какие столбцы понадобятся в будущем
• Меньше работы при модификации приложения
• Скорость разработки возрастает
• Чем проще текст запроса, тем лучше
Страница  6
www.specialist.ru
Вредный совет №1
Используйте конструкцию «SELECT * …»
• Проблемы с ассоциативными массивами в приложении
• Игнорирование некластеризованных индексов
• А как насчёт вычисляемых столбцов?
• Дополнительная нагрузка на сеть при передаче результата
запроса приложению
Страница  7
www.specialist.ru
Вредный совет №1.1
При сортировке обращайтесь
к столбцам по номерам
Страница  8
www.specialist.ru
Вредный совет №1.1
Обращайтесь к столбцам по номерам
• Простое решение – лучшее решение!
• Можно печатать гораздо меньше текста
Страница  9
www.specialist.ru
Вредный совет №1.1
Обращайтесь к столбцам по номерам
• При изменении структуры объектов связь по номерам
разрушается!
Страница  10
www.specialist.ru
Вредный совет №1.2
При вставке используйте
конструкцию
«INSERT INTO Table1 VALUES …»
Страница  11
www.specialist.ru
Вредный совет №1.2
Используйте «INSERT INTO Table1 VALUES …»
• Простое решение – лучшее решение!
• Можно печатать гораздо меньше текста
Страница  12
www.specialist.ru
Вредный совет №1.2
Используйте «INSERT INTO Table1 VALUES …»
• При добавлении новых столбцов в таблицу, написанные ранее
INSERT’ы перестают работать!
Страница  13
www.specialist.ru
Вредный совет №2
Всегда старайтесь решить
задачу одним запросом
Страница  14
www.specialist.ru
Вредный совет №2
Решайте любую задачу одним запросом
• Почувствуйте себя мастером
• Если даже один запрос выполняется медленно, то несколько
запросов будут ещё медленнее!
• Один запрос всегда элегантнее и изящнее
Страница  15
www.specialist.ru
Вредный совет №2
Решайте любую задачу одним запросом
• Сложно писать, сложно модифицировать, сложно отлаживать
• Резко возрастает вероятность ошибки
• Решение перестаёт помещаться в голове
Страница  16
www.specialist.ru
Вредный совет №3
Для получения случайных строк
используйте выборку с сортировкой
по генератору случайных чисел
Страница  17
www.specialist.ru
Вредный совет №3
Сортируйте строки по случайным значениям
• Получаем действительно случайную строку
• Простое решение
Страница  18
www.specialist.ru
Вредный совет №3
Сортируйте строки по случайным значениям
• Не используются индексы
• Скалярные вычисления для каждой строки
• После вычисления всех значений 99,999% результата
выбрасывается (много напрасной работы и бесполезной нагрузки
на сервер)
Страница  19
www.specialist.ru
Вредный совет №3.1
Применяйте скалярные функции
к столбцам в секциях
WHERE и ORDER BY
Страница  20
www.specialist.ru
Вредный совет №3.1
Используйте функции в WHERE и ORDER BY
• Простое решение
• Запрос легче читается
Страница  21
www.specialist.ru
Вредный совет №3.1
Используйте функции в WHERE и ORDER BY
• Не используются индексы
• Скалярные вычисления для каждой строки
Страница  22
www.specialist.ru
Вредный совет №4
Используйте LIKE
для поиска по тексту
Используйте регулярные выражения
для поиска по тексту
Страница  23
www.specialist.ru
Вредный совет №4
Используйте LIKE/RegEx для поиска по тексту
• Простое решение
• Можно искать сложные конструкции
Страница  24
www.specialist.ru
Вредный совет №4
Используйте LIKE/RegEx для поиска по тексту
• Очень медленно!
• Решение не масштабируется
• Практически невозможно искать слова
Страница  25
www.specialist.ru
Вредный совет №5
Используйте NULL,
как обычное значение
Страница  26
www.specialist.ru
Вредный совет №5
Используйте NULL, как обычное значение
 Если уж придуман NULL, надо его использовать
Страница  27
www.specialist.ru
Вредный совет №5
Используйте NULL, как обычное значение
 NULL – это не значение
Страница  28
www.specialist.ru
Вредные советы
1. Используйте конструкцию «SELECT * …»
1.
Обращайтесь к столбцам по номерам
2.
Используйте «INSERT INTO Table1 VALUES …»
2. Решайте любую задачу одним запросом
3. Сортируйте строки по случайным значениям
1.
Применяйте скалярные функции к столбцам в WHERE и ORDER BY
4. Используйте LIKE для поиска по тексту
5. Используйте NULL, как обычное значение
Страница  29
www.specialist.ru
Задача
Сколько блоков размером
2x1x1 находится внутри
этого параллелепипеда?
Невидимая часть полностью
заполнена.
Страница  30
www.specialist.ru
В следующих сериях
Это были вредные советы для тех, кто пишет SQL-запросы, то есть
для пользователей баз данных.
А дальше:
 Ещё одна порция вредных советов для пользователей баз данных
 Вредные советы для разработчиков баз данных
 Вредные советы для администраторов баз данных
 Вредные советы для разработчиков приложений, использующих базы
данных
Страница  31
www.specialist.ru
Download