Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что быстрее? 
:(
    Опции темы
chiffa
Дата 12.6.2017, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Всем добрый день. Если задача получить последний номер заказ и прибавить к нему 1.

Подскажите, что будет выполняться быстрее.

Код

select order_num+1 from orders where user_id = 1 order by datetime desc limit 0, 1


или 

Код

select a.order_num+1 from orders a where a.user_id = 1 group by a.order_num order by a.order_num desc limit 0, 1


если исходить из того, что записей будет несколько миллионов

Это сообщение отредактировал(а) chiffa - 12.6.2017, 15:55
PM MAIL   Вверх
Akina
Дата 13.6.2017, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Запросы неэквивалентны. Сравнение не имеет смысла.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 13.6.2017, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Почему не имеет смысла? Цель запроса получить номер следующего заказа и я выбирается наиболее оптимальна методика для этого
PM MAIL   Вверх
Zloxa
Дата 13.6.2017, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(chiffa @  13.6.2017,  10:22 Найти цитируемый пост)
 Цель запроса получить номер следующего заказа 

Полагаю, при этом надо гарантировать его уникальность.
Полагаю, при этом работа ведется в конкурентной среде.

Код

create table sequence(id int not null primray key, current_val int not null);
insert into sequence values (1, 0);


Код

update sequence set current_val = last_insert_id(current_val+1) where id = 1;
select last_insert_id();



Akina, MyISAM при update накладывает блокировку на строку или на блок(как МС, например)?

Это сообщение отредактировал(а) Zloxa - 13.6.2017, 11:51


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 13.6.2017, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Цитата(chiffa @  13.6.2017,  10:22 Найти цитируемый пост)
Почему не имеет смысла?

Потому что запросы НЕЭКВИВАЛЕНТНЫ!!! на одних и тех же исходных данных - могут вернуть РАЗНЫЕ данные.

Цитата(Zloxa @  13.6.2017,  11:05 Найти цитируемый пост)
MyISAM при update накладывает блокировку на строку или на блок(как МС, например)?

Locking granularity = Table.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 13.6.2017, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @ 13.6.2017,  13:00)
Цитата(chiffa @  13.6.2017,  10:22 Найти цитируемый пост)
Почему не имеет смысла?

Потому что запросы НЕЭКВИВАЛЕНТНЫ!!! на одних и тех же исходных данных - могут вернуть РАЗНЫЕ данные.

Цитата(Zloxa @  13.6.2017,  11:05 Найти цитируемый пост)
MyISAM при update накладывает блокировку на строку или на блок(как МС, например)?

Locking granularity = Table.

Четр. Имел в виду InnoDB, которая с тразнзакции. Вечно их путаю. Сначаала написал MySQL, потом подумал что там от движка зависимо и решил уточнить про InnoDB, но вместо того написал MyISAM 
 smile  smile  smile 

Судя по всему InnoDB залочит именно строку, не блок. 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 14.6.2017, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Цитата(Zloxa @  13.6.2017,  18:10 Найти цитируемый пост)
Судя по всему InnoDB залочит именно строку, не блок.  

Да, Locking granularity = Row. Но в InnoDB все локи - индексные (даже если на таблице вообще нет индексов, всё равно существует синтетический кластерный индекс по внутреннему идентификатору записи), так что record lock порой на деле оказывается gap lock.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1321 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.