[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Либо лыжи не едут
Страницы: 1, 2
dr.nomore
Не замечал пока отклонений. SQL_CALC_FOUND_ROWS нормально работает с любыми джойнами, верями и всякими там сортировками.

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

---

Цитата
На таблицах каких размеров пробовали?


Это не имеет значения применительно к real_query() по идее. limit 0 втыкаю больше как амулет, потому что упомянутая функция не выдает результата вообще. Там даже num_rows отсутствует, или всегда равен 0, я уже забыл, проверять лень. Чтобы проверить будет вообще результат запроса или нет - надо проверять filed_count, потому что и affected_rows молчат как рыба об лед.

В подробности не вдавался, но суть real_query() по-видимому сводится к перемещению курсора на сервер. Я когда начал майсклю осваивать не мог найти где у них опции этого самого курсора, решил что нету и забил, начал юзать как все - query(). К счастью вспомнил. В PDO вроде есть опции курсора, но PDO мне не стучит.

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

---

Кто там писал что мне запросы писать лень - не лень. На прямой - 3 тире 4 штуки, а на кривой по обстоятельствам еще может быть полдюжины вспомогательных. Это в заднем проходе такие мероприятия - в том самом backend'е. На фроне все в точности наоборот. В моделе может быть один витиеватый запрос вплоть до хмтля в нем.
dr.nomore
Конечно сервер все равно ищет и кеширует что-то, не иначе. Я про real_query. Однако существует принципиальная разница между получить данные и не получать данные. Я не знаю как устроен PMA, а тем более консоль, то есть где у них там курсор вообще, но если вы можете прочитать и сравнить числа, то какие еще вопросы могут быть к лимиту 0?

Лимит 30

Showing rows 0 - 29 ( 14,338 total, Query took 0.0227 sec) [factory: 0 - 0]

c limit 0:

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0015 sec )

на лимит 1000 РМА завис

В своей апликухе я открывал этот шоп целиком, специально позырить чем кончится. Открылся. Браузер правда скрипел при прокрутке, но крутил и ява работала и все остальное.

1000, конечно, не много, просто РМА так разжирел, что и на 1000 у него уже инфаркт.
dr.nomore
Прочихался РМА, показал не давая скрыть баннер Loading... Это при том что там первые страницы, самые свежие которые, вообще практически не заполнены. Полей дофига предусмотрено, но народ забил все вводить как хотел какой-то творец. Таблица не моя, к тому же она в 1251, а у меня юникод.
glock18
Цитата (dr.nomore @ 15.12.2013 - 18:39)
Не замечал пока отклонений. SQL_CALC_FOUND_ROWS нормально работает с любыми джойнами, верями и всякими там сортировками.


Цитата (dr.nomore @ 15.12.2013 - 18:39)
Это не имеет значения применительно к real_query() по идее


Ну вообще то, если бы вы читали, в чем проблема с этой директивой (была, по крайней мере), то такого вопроса бы не задали (поскольку проблема в full table scan'е, что никак не связано с джойнами и сортировками ). Я, в принципе, верю, что mysql наконец исправили жуткую хрень с SQL_CALC_FOUND_ROWS (http://forums.mysql.com/read.php?115,29576...6739#msg-296739) только потому что проблеме уже 100 лет в обед. Проверьте это на таблице с миллионами записей и энным количеством текстовых полей, и сравните с count + query. С индексом и без. Когда я проверял это последний раз (все так же потому что кто-то здесь решил, что верно обратное), разница была просто чудовищной.
dr.nomore
Цитата
So, obvious conclusion from this simple test is: when we have appropriate indexes for WHERE/ORDER clause in our query, it is much faster to use two separate queries instead of one with SQL_CALC_FOUND_ROWS.


http://www.mysqlperformanceblog.com/2007/0...alc_found_rows/

Потренировался на том самом шопе. В отличии от схемы автора цитаты, там как я уже писал, много полей, а именно 14, и основная часть - текст (не варчар, текст).

Ну вот, запрос с sql_no_cache лимитом на 30 записей дает 0.00 - 0.01 с, такой же запрос еще и с подсчетом sql_cacl_found_rows дает 0.01 - 0.00, запрос на подсчет без лимита 1 поля которое пк, дает 0.01 - 0.02 с.

В табле 15К записей на 14 полей. Разумеется что если поменять where то циферки поменяются, но пока что ничего криминального я не заметил.

Нашел сообщение об упомянутом баге, самое свежее сообщение за 2009 год, первое за 2006. Что стало с тех пор - не знаю. Но все летает как из пушки как видите.

Про миллион записей я не думал, начну когда будет миллион.
dr.nomore
На сайте (в черном ходе) я завел таймер. Когда он дошел до 0.1 сек я подумал неплохо бы схему закешировать и закешировал в сессии. таймер сразу упал наполовину, до 0.05. Это на _весь_ сайт. Ну то есть от инклюда либры и до рендера паги. А запросов там с дюжину, не меньше. Схема жрала много потому что там голимый файлсорт. В схеме же нет вообще никаких индексов.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.