Есть ли в LIMIT 1 повышение производительности? - PullRequest
5 голосов
/ 17 октября 2011

Имеет ли добавленный LIMIT 1 после запроса какое-либо повышение производительности?

... если может быть только одна возможная запись, которая соответствует (предложение WHERE для первичного ключа)?

SELECT `x`
FROM `unicorns`
WHERE `id` = 123
LIMIT 1

... то же самое, но теперь это DELETE:

DELETE FROM `unicorns`
WHERE `id` = 123
LIMIT 1

... и UPDATE:

UPDATE `unicorns`
SET `rainbows` = `rainbows` + 1
WHERE `id` = 123
LIMIT 1

P.S. Столбец id является первичным ключом, поэтому он уникален.

Спасибо за совет!

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

это зависит от того, есть ли у вас индекс по столбцу или нет

DELETE FROM `unicorns` WHERE `id` = 123 LIMIT 1

бессмысленно, если id является первичным ключом, но

DELETE FROM `unicorns` WHERE `noindexoclumn` = 123 LIMIT 1

даст вам повышение производительности

0 голосов
/ 17 октября 2011

Это повысит производительность, поскольку БД будет инициировать только выборку строк, удовлетворяющих условиям запроса. А на обновлениях какой смысл? Особенно, если вы делаете точное совпадение с первичным ключом - вам нужно будет сначала сопоставить только одну строку, поэтому нет смысла говорить, что значит «обновить эту одну строку в таблице, а обновить только одну строку в большинство».

...