что можно и нельзя делать для написания запросов MySQL - PullRequest
4 голосов
/ 23 апреля 2010

При написании запроса мне всегда интересно, пишу ли я наиболее оптимизированный запрос или нет? Я знаю такие вещи, как:

1) использование поля SELECT1, filed2 вместо SELECT *

2) Задание правильных индексов для таблиц

но я уверен, что при написании запросов нужно учитывать больше вещей, поскольку большая часть базы данных может только расти, а оптимальный запрос поможет во время выполнения. Можете ли вы поделиться некоторыми советами и рекомендациями по написанию запросов?

Ответы [ 7 ]

3 голосов
/ 23 апреля 2010

Тестирование - лучший способ измерить производительность. Отслеживайте свои запросы в действующей базе данных и используйте такие вещи, как медленный журнал запросов .

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

2 голосов
/ 23 апреля 2010
  • Используйте правильные типы данных для ваших полей
  • Использовать символ обратной галочки (`) для зарезервированных ключевых слов
  • При работе с несколькими таблицами попробуйте использовать объединения

Ресурс:

См:

20 советов по SQL

1 голос
/ 07 июня 2010

Коррелированные подзапросы очень плохи, но часто плохо понимаются и заканчиваются в производстве. Их часто можно исправить, используя вместо этого производные таблицы и объединение. http://en.wikipedia.org/wiki/Correlated_subquery

1 голос
/ 07 июня 2010

обязательно используйте поля ниже в каждой таблице

tablename_id( auto increment , unsigned zerofill)
created_by( timestamp)
tablerow_status( enum ('t','f') by default set 't')
  1. всегда оставляйте комментарий, когда вы создаете поле в mysql (это помогает при поиске в phpmyadmin))
  2. alwayz позаботится о нормализации форм
  3. если вы делаете какое-то поле, которое всегда будет положительным, выберите unsigned.
  4. использовать десятичный тип данных вместо числа с плавающей запятой в некоторых случаях (например, скидка должна быть не более 99,99%, поэтому используйте десятичную (5,2)
  5. используйте дату, тип данных времени там, где это необходимо, не используйте метку времени везде
1 голос
/ 23 апреля 2010

На самом деле никакие «подсказки» не могут вам помочь.
Дизайн базы данных требует глубоких знаний, а не советов.

Всегда есть "вес" этих "не". Большинство таких списков попадают в список самых неважных вещей и не упоминают важные. Ваш список, например, если это был кулинарный форум:

  1. Всегда используйте нож с черной ручкой
  2. Чтобы приготовить хорошее блюдо, нужно правильно подобрать ингредиенты.

Первый впечатляет, но никогда не помогает в реальном мире.
Во-вторых, это правильно, но для того, чтобы сделать это правильно, необходимо обладать глубокими знаниями.

Итак, это должна быть книга, а не советы. Одни из Поля Дубиоса среди рекомендованных.

1 голос
/ 23 апреля 2010

Помимо полезных действий и недостатков, вы можете найти Скрытые функции MySQL полезными.

0 голосов
/ 19 января 2011

Еще одна вещь, которую я обнаружил сегодня, касается разницы между COUNT (*) и COUNT (столбец)

Использование COUNT (*) быстрее, чем COUNT (столбец)

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

Лучше использовать столбец NOT NULL для MYISAM и innoDB, чем для какого-либо другого столбца, для которого допускается значение Null.

Подробнее здесь

...