![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1 2
paulus написал:
Вариант по умолчанию должен, разумеется, не считать count вообще.
Так и есть.
paulus написал:
Сигнализировать о том, как считать количество, можно в том же параметре, который передает количество
строк, которое нужно передать.
Это не совсем удобно. Почему - расскажу как-нибудь потом.
paulus написал:
Ну то есть я, если честно, не понимаю, почему мы это
обсуждаем на форуме о MySQL
Ну, Вася спросил, зачем мне это нужно, я и рассказал
paulus написал:
Миш, ты пишешь ORM, возьми готовый какой-то.
Я пытался, но понял, что не написать свой я не могу
Да и вообще-то поздно отговаривать, т.к. я его уже написал, он работает . Осталось подготовить к нему пояснительную статью, чем сейчас и занимаюсь.
Неактивен
Я бы не использовал SQL_CALC_FOUND_ROWS вообще никогда. Дело в том, ситуации, когда с ним нет проблем - это ситуации, когда не нужна оптимизация, то есть запрос быстрый изначально. Если запрос тяжелый, то как уже подробно объяснил paulus, запрос с SQL_СALC будет медленнее двух запросов (нужно помнить, что если есть ORDER BY, то SQL_CALC почти гарантирует неоптимизируемый filesort). Нагружать юзера выбором опции не стоит - пусть потратит свое внимание на другие важные детали - трудно представить себе ситуацию, когда он захочет установить SQL_CALC - это может быть только, если два запроса будут работать медленно, но тогда SQL_CALC не поможет.
Неактивен
Убедили
Делаем COUNT(*) по умолчанию.
Маленький вопросик: бывает ли смысл внутри COUNT что-то вместо звездочки писать в данном случае?
Неактивен
Нет.
count(что-то) - это подсчет сколько раз это что-то не является null.
count(*) - в этом случае сервер знает, что выражение внутри скобок не может быть null. Здесь * это не аналог полного списка столбцов, они вообще игнорируются, а считаются только сами строки.
Неактивен
paulus написал:
Миш, ты пишешь ORM, возьми готовый какой-то.
Я пытался, но понял, что не написать свой я не могу smile
Да и вообще-то поздно отговаривать, т.к. я его уже написал, он работает smile. Осталось подготовить к нему пояснительную статью, чем сейчас и занимаюсь.
Опубликовал статью: http://webew.ru/articles/5096.webew
Всех с наступающим!
Неактивен
Мой ответ хоть и на старый пост, но думаю поможет определиться и другим посетителям в будущем использовать "SQL_CALC_FOUND_ROWS" или "count(*)".
Вот ответ техподдержки одного из хостинг-провайдеров по поводу нагрузки на CPU процессом mysqld:
"Высокую нагрузку на сервер создавали запросы к базе данных вашего сайта:
SELECT SQL_CALC_FOUND_ROWS p.`virtuemart_product_id` FROM `#_virtuemart_products`
Для исправления этой проблемы следует оптимизировать запросы к базе в скриптах сайта и хранение данных в самой базе, а также проставить индексы на часто используемые поля. Для этого следует обратиться к разработчику вашего сайта, либо к сторонним веб-специалистам."
Подобные ответы получал неоднократно на разных сайтах и хостингах.
Таким образом, можно говорить о крайней нежелательности использования в запросах "SQL_CALC_FOUND_ROWS".
Неактивен
Страниц: 1 2