Вопрос по SQL запросу

12
edogs software
На сайте с 15.12.2005
Offline
775
#11
siv1987:

не знаю просто на сколько быстро отработает вложенный select max(pid)

Достаточно быстро для практического применения, так что можете использовать. Но все же попробуйте наш последний вариант отсюда сравнить с ним.

ivan-lev:
Пример "меньшинства" будет?

Только невнятный, устный и по памяти:)

Несколько лет назад натолкнулись на это случайно заметив глюк при выборке в блок последних сообщений с форума, очень долго искали причину. Справедливости ради надо заметить, что "не первое" значение, а "случайное" там выбиралось то ли из-за оптимизации запроса мускулом (по документации-то ордер бай там значения не имеет в такой ситуации, так что возможно мускул оптимизировал выкидывая его) то ли из-за кэширования где-то промежуточных результатов (помогал sql_no_cache но не всегда) - до конца так и не разобрались если честно, но прочли документацию - испугались - с тех пор "дуем на воду". Вполне допускаем что не правы, как говорится "наше мнение не обязательно правильное" ©

ivan-lev:
А можно подробнее?

Возможно перемудрили выражаясь, имели ввиду не более чем сказанное Вами "indeterminate value".

Но пожалуй стоит еще упомянуть в общем случае об извращенческом варианте выборки вида max(concat_ws(pid,fieldname,'-')) - но тут в зависимости от данных нужно думать как склеивать строки, что бы максимум оставался правильным, но сама по себе идея вполне себе рабочая - поскольку склеиваются поля из одной строки.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
IL
На сайте с 20.04.2007
Offline
435
#12
edogs:
Только невнятный, устный и по памяти

За неимением рабочего кейса дискуссию предлагаю свернуть (точнее нерабочего.. - т.е. чтоб запрос выдавал некорректный результат)

edogs:
Возможно перемудрили выражаясь,

ОК, =)

edogs:
Но пожалуй стоит еще упомянуть в общем случае об извращенческом варианте выборки вида max(concat_ws(pid,fieldname,'-'))

Если задумка - вывести что-то вроде 2-3, то "-" (минус.. разделитель то есть) лучше ставить первым аргументом. Для "корректного" сравнения можно использовать zerofill или LPAD, если нужно обойтись без изменения таблицы.. А вот оптимальность такого запроса...

edogs:
siv1987:
не знаю просто на сколько быстро отработает вложенный select max(pid)
Достаточно быстро для практического применения, так что можете использовать. Но все же попробуйте наш последний вариант отсюда сравнить с ним.

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

p.s. edogs, немного смущает множественное число в Ваших сообщениях..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
siv1987
На сайте с 02.04.2009
Offline
427
#13
edogs:
Достаточно быстро для практического применения, так что можете использовать. Но все же попробуйте наш последний вариант отсюда сравнить с ним.

Да, ваш оказался быстрее. 3 сек против вашего 0.0004 сек. Хотя я свой запрос немного подправил добавив вместо таблицы topics вложенный селект из нее, скорость сократилась до 0.03 сек. Но при добавление новых параметров в условие, время почти одинаковое.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий