#php #mysql #performance #optimization
#php #mysql #Производительность #оптимизация
Вопрос:
Допустим, у меня есть таблица с 1000 записями, и я хочу обновить только одну запись. Ускорит ли запрос, если я укажу больше предложений ‘WHERE’, чтобы сузить поиск до меньшего количества возможных совпадающих записей, или быстрее просто указать одно предложение WHERE (например. Идентификатор записи)?
ПРИМЕР:
UPDATE table
SET record_name = 'new name'
WHERE record_ID = 'x'
LIMIT 1
или
UPDATE table
SET record_name = 'new name'
WHERE record_ID = 'foo'
AND record_city = 'bah'
LIMIT 1
Ответ №1:
Предполагая, что record_ID является первичным ключом, это, безусловно, самый быстрый способ обновить одну запись.
Комментарии:
1. Значит, указание большего количества идентифицирующих элементов не ускоряет запрос?
2. Это может помочь, если вы не обновляете что-либо по индексированному столбцу — чем более подробным является ваше предложение where, тем меньше записей нужно сканировать и обновлять. Обновление по первичному ключу было бы самым быстрым способом обновить одну запись.
Ответ №2:
если record_ID является первичным ключом, первое решение является самым быстрым. Я думаю, что нет необходимости указывать «LIMIT 1», потому что это подразумевается в первичном ключе
Ответ №3:
Стоит отметить, что две команды на самом деле также не являются функционально эквивалентными. Вы всегда должны запускать запрос, который выполняет то, что вы хотите сделать.
Оптимизатор в базе данных разберется с этим. В этом случае, даже если вы укажете оба варианта, для его удаления потребуется получить доступ к местоположению строки, а чтение дополнительного WHERE напротив столбца является очень незначительным штрафом по сравнению с переходом к строке в первую очередь.
Обратите внимание также, что использование LIMIT без ORDER BY приведет к прерыванию сериализации для репликации и восстановлению двоичных журналов для восстановления на момент времени в режиме ИНСТРУКЦИИ.
В этом случае лучше указать в WHERE все, что необходимо, и не вводить ОГРАНИЧЕНИЕ.
Комментарии:
1. Можете ли вы показать код? Что там было насчет сериализации (вроде как потерял меня). Я предположил, что ограничение ускорит запросы, поскольку после обнаружения запрос остановится и больше не будет искать совпадения.