2014-12-17 3 views
0

Я видел много вопросов о том, как пользователи могут оптимизировать свои запросы, потому что они слишком медленны, даже когда они занимают менее секунды. Пытаясь понять, что определяет медленный запрос, я нашел это question, в котором говорится, что это то, о чем жалуется пользователь.Как я могу определить, когда мой запрос должен быть оптимизирован?

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

Есть ли правило для запроса скорости запроса? Например, допустим, я могу запросить триллион записей за 50 мс (составленный номер), но у меня есть другой запрос, который занимает 50 мс, чтобы запрашивать только 100 записей. Очевидно, что один из них неэффективен, но оба они одинаковы для внешнего пользователя. Есть ли что-то похожее на нотацию Big-O, которая может быть применена к SQL-запросам?

ответ

4

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

На мой взгляд, для текущего приложения вы должны сначала написать свои запросы для целей обслуживания - как вы будете исправлять, обслуживать и понимать код через 6 месяцев? Через 2 года? Если вы не можете поддерживать код, то оптимизация - это продолжающийся кошмар. Я не сторонник написания неэффективного кода, и, безусловно, есть некоторые лучшие/лучшие практики с точки зрения производительности (например, исключение ненужных материализованных подзапросов в MySQL). Но понимание того, что происходит, имеет тенденцию быть более важным в долгосрочной перспективе, чем оптимизация, которая больше не может понадобиться при следующем пути к программному обеспечению. Некоторые методы оптимизации запросов могут напрямую противоречить этой цели. Многие другие поддержат его хорошо.

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

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

+0

Итак, в примере 50 мс за миллион записей или 100 записей, если все остальное было равным, и оба поддерживаемые могли бы вы сказать, что оба они в порядке? Что не имеет значения, если один из 20 тыс. Записей за миллисекунду, когда другой - всего 2 записи за миллисекунду, если это не повредит пользователю, и оба они могут быть пригодны для обслуживания? – AdamMc331

+1

@ McAdam331. , , Во-первых, напишите разумный, поддерживаемый код. Затем, если вам нужно оптимизировать, оптимизируйте. Но это должно быть обусловлено требованиями пользователей. Если нет узких мест в производительности, обычно есть другие вещи, над которыми нужно работать. –

Смежные вопросы