LIMIT & UPDATE в Zend_DB

SaBo

Новичок
LIMIT & UPDATE в Zend_DB

Раньше всегда в запросах с UPDATE ставил LIMIT 1, так как считал, что это позволяет ускорить работу БД.
Сейчас перешёл на Zend_DB и понял, что не так то просто в UPDATE LIMIT засунуть. С чем это связано? С тем, что LIMIT нисколько не ускоряет работу с базой данных? Или по каким-то другим соображениям?

Таблица у меня следующая:

CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID пользователя',
`email` varchar(25) NOT NULL COMMENT 'E-mail поьзователя',
`password` varchar(32) NOT NULL COMMENT 'Хэш пароля',
`salt` varchar(10) NOT NULL COMMENT 'Соль пароля',
`name` varchar(20) NOT NULL COMMENT 'Имя пользователя',
`sex` tinyint(1) NOT NULL COMMENT 'Пол пользователя',
`registration_date` datetime NOT NULL COMMENT 'Дата регистрации',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
Вообще логично предположить, что кода я обновляю таблицу по условию WHERE id = 3, строчка с таким id будет единственная (id - AUTO_INCREMENT) и LIMIT в этом случае скорости не придаст, но понимает ли это MySQL?
 

zerkms

TDD infected
Команда форума
Вообще логично предположить, что кода я обновляю таблицу по условию WHERE id = 3, строчка с таким id будет единственная (id - AUTO_INCREMENT) и LIMIT в этом случае скорости не придаст, но понимает ли это MySQL?
понимает что?
зачем тебе LIMIT, если запись с id = 3 и так одна? зачем ты "оптимизируешь" это место?
 

SaBo

Новичок
Автор оригинала: zerkms
понимает что?
зачем тебе LIMIT, если запись с id = 3 и так одна? зачем ты "оптимизируешь" это место?
Я не совсем представляю, как MySQL обновляет данные в таблице. Я так предполагаю, что если LIMIT не установлен, то MySQL проходится по всем строкам и пытается сравнить их на соответствие выражению WHERE. Предположим, если у меня 10000 строк, а мне нужно обновить только третью, то весь остальной хвост будет пройден порожняком и увеличит время запроса (по крайней мере, насколько я знаю, так происходит в SELECT).

Или другой вариант (который больше похож на правду), MySQL знает, что в поле ID не может быть одинаковых значений, а это значит, что она проходится только по стоке с id = 3 и на этом успокаивается.

Короче говоря, суть вопроса: будет ли работать UPDATE (SELECT, DELETE) быстрее, если установить LIMIT или нет?
 

zerkms

TDD infected
Команда форума
Я не совсем представляю, как MySQL обновляет данные в таблице. Я так предполагаю, что если LIMIT не установлен, то MySQL проходится по всем строкам и пытается сравнить их на соответствие выражению WHERE.
неправильно. если у тебя id автоинкрементный (а я уверен, что он таковой), тогда это индекс (если точнее - то primary key) и поиск по нему мгновенный.

Предположим, если у меня 10000 строк, а мне нужно обновить только третью, то весь остальной хвост будет пройден порожняком и увеличит время запроса (по крайней мере, насколько я знаю, так происходит в SELECT).
неправда. снова читать об индексах.

Короче говоря, суть вопроса: будет ли работать UPDATE (SELECT, DELETE) быстрее, если установить LIMIT или нет?
короче говоря - читай об индексах.
 

SaBo

Новичок
Автор оригинала: zerkms
неправильно. если у тебя id автоинкрементный (а я уверен, что он таковой), тогда это индекс (если точнее - то primary key) и поиск по нему мгновенный.
Автоинкрементный.
Большое спасибо за инфу!
 
Сверху