Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MYSQL: как оптимизировать такой запрос?

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

morjov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне необходимо выбрать из таблицы несколько элементов, id которых равняется какому-то числу, вот что вышло у меня:

Код:
SELECT a FROM tb WHERE id=1 OR id=7 OR id=134 OR id=5 LIMIT 30

При этом условий id=X может быть много. Это можно как-нибудь оптимизировать?

----------
Баннер - это флаг, транспарант, растяжка. В Интернете это должно называться по другому. E-баннер.

Всего записей: 341 | Зарегистр. 05-01-2004 | Отправлено: 22:45 25-07-2006
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
morjov
where FIND_IN_SET(id, '1,7,134,5');
 
правда не уверен что скорость работы увеличится.

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 23:15 25-07-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
where id in (1,7,134,5)  
Что характерно, для текстового поля, in (2) у нас возвращало все строки где содержалось 2, так что аккуратнее.
Advanced_Guest

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

Увеличится. У нас когда-то было именно or - переписали на in - стало быстрее где-то на порядок минимум. Почему - черт знает, мускул по идее должен оптимизировать. Длина строки запроса опять же сократится, а она не большая вроде бы.

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 01:11 26-07-2006 | Исправлено: edogs, 01:12 26-07-2006
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
where FIND_IN_SET(id, '1,7,134,5');    правда не уверен что скорость работы увеличится

... так как добавится преобразование типов.
 
SELECT a FROM tb WHERE id IN (1,7,134,5) LIMIT 30
Составь несколько вариантов c разным кол-вом параметров.
Варианты проверь через  
http://www.mysql.ru/docs/man/EXPLAIN.html
 
Вложенные запросы будут тормозить.
 
Вариант с IN при большом кол-ве параметров тормозит. Но все равно ест смысл сравнить его с простым запросом, т.к. используется логический поиск.
 
Встроенный оптимизатор сам может неплохо оптимизировать твой запрос.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 01:42 26-07-2006
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А не быстрее будет создать временную табличку, поместить туда все id и объеденить их?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 11:01 26-07-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если я ничего не путаю, временные таблицы нужны для того, чтобы при "долгих" запросах не держать открытой таблицу, а работать с временной.

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 12:41 26-07-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
Если я ничего не путаю, временные таблицы нужны для того, чтобы при "долгих" запросах не держать открытой таблицу, а работать с временной.

Если ничего не путаем, то временные таблицы нужны когда возвращаемые данные нужны лишь для того, что бы по ним сделать еще выборку.

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 12:55 26-07-2006
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edogs

Цитата:
Если ничего не путаем, то временные таблицы нужны когда возвращаемые данные нужны лишь для того, что бы по ним сделать еще выборку.  

Вот я и спрашиваю, в данном случае будет не быстрее сделать выборку через временную таблицу? Или мб еще быстрее если создать таблицу типа MEMORY и использовать ее?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 13:49 26-07-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr

Цитата:
Вот я и спрашиваю, в данном случае будет не быстрее сделать выборку через временную таблицу? Или мб еще быстрее если создать таблицу типа MEMORY и использовать ее?

Что бы создать временную таблицу из выборки, Вам надо создать эту временную таблицу сделав выборку. Смысл в чем?

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 15:50 26-07-2006
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edogs

Цитата:
Что бы создать временную таблицу из выборки, Вам надо создать эту временную таблицу сделав выборку. Смысл в чем?  

Просто предположение, что объединение таблиц в MySQL работает быстре, чем использование IN. А вставить во временную таблицу хранящуюся в памяти список id времени займет очень мало.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 16:09 26-07-2006
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поспорим?
 
Для временной таблицы ее нужно создать (операция раз), запостить туда данные (2), сделать запрос.
 
Для запроса - сделать запрос
 
EXPLAIN так и не пользовали? Ну-ну. Тогда можно только предполагать.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 16:47 26-07-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr

Цитата:
Просто предположение, что объединение таблиц в MySQL работает быстре, чем использование IN. А вставить во временную таблицу хранящуюся в памяти список id времени займет очень мало.

Только если мускул писали ну ооооооооочень кривые программеры. Объединение таблиц есть суть выборка данных из одной, а потом по условию выборка данных из другой. Вот вторая часть и есть IN

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 18:34 26-07-2006
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » MYSQL: как оптимизировать такой запрос?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru