SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.10.2012 12:33:44

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

ON DUPLICATE KEY UPDATE - мне кажется, или он не оптимален

Я в шоке...........

SELECT
1
FROM
`table_geo_cities_new`
WHERE
`city_title` = 'Могилёв' &&
`user_id` = '10336'

( запрос занял 0.0003 сек. )

UPDATE
`table_geo_cities_new`
SET
`country_title` = 'Беларусь',
`region_title` = '',
`state_title` = 'Могилёвская'
WHERE
`city_title` = 'Могилёв' &&
`user_id` = '10336'

( запрос занял 0.0002 сек. )

INSERT INTO
`table_geo_cities_new`
SET
`city_title` = 'Могилёв',
`country_title` = 'Беларусь',
`region_title` = '',
`state_title` = 'Могилёвская',
`user_id` = '10336'
ON DUPLICATE KEY
UPDATE
`country_title` = 'Беларусь',
`region_title` = '',
`state_title` = 'Могилёвская'

( запрос занял 1.6440 сек. )

Как так то........... в чём тогда смысл этой конструкции.... я у шоке, я расстроен sad(


Имя индекса    Тип        Уникальный    Упакован    Поле    Уникальных элементов    
PRIMARY        BTREE    Да            Нет        id        859    A        
city_title    BTREE    Да            Нет        city_title    859    A        
user_id                                                    859    A    
city_title_2    BTREE    Нет            Нет        city_title    859    A        

Отредактированно freeetu (09.10.2012 12:40:51)

Неактивен

 

#2 09.10.2012 14:51:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: ON DUPLICATE KEY UPDATE - мне кажется, или он не оптимален

Приведенный вами insert или вставит новую строку (если нет записи с `city_title` = 'Могилёв'), или выполнит

UPDATE
`table_geo_cities_new`
SET
`country_title` = 'Беларусь',
`region_title` = '',
`state_title` = 'Могилёвская'
WHERE
`city_title` = 'Могилёв'


что отличается от update, с которым вы проводите сравнение.

http://dev.mysql.com/doc/refman/5.6/en/ … icate.html

Неактивен

 

#3 09.10.2012 16:01:33

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

Re: ON DUPLICATE KEY UPDATE - мне кажется, или он не оптимален

Я просто на цифры смотрю. В моём примере запись такая уже есть, (уникальный ключ идёт по двум полям `uset_id` и `city_title`, составной ) То есть  ON DUPLICATE именно обновляет запись, но вы посмотрите на цифры!...

если просто проверить SELECT-ом  и затем обновить UPDATE-ом:
0,0005 сек (а конструкция ON DUPLICATE KEY UPDATE целых 1,63 сек!)

я вот о чём.



кстати

INSERT INTO  `table_geo_cities_new`
SET  `city_title` =  'Геленжик',
`country_title` =  'Россия',
`region_title` =  '',
`state_title` =  'Могилёвская',
`user_id` =  '10336'
( запрос занял 0.2461 сек. )

Такая "скорость" связана с наличием индексов? Их два:
- составной уникальный `uset_id` и `city_title` и
- уникальный `city_title`

Отредактированно freeetu (09.10.2012 16:08:08)

Неактивен

 

#4 09.10.2012 17:09:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: ON DUPLICATE KEY UPDATE - мне кажется, или он не оптимален

Делать выводы о быстродействии на основании однократного выполнения запроса некорректно.

http://sqlinfo.ru/forum/viewtopic.php?id=4914

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson