Влияет ли это на скорость запроса при использовании SQL_CALC_FOUND_ROWS в MySQL? - PullRequest
3 голосов
/ 21 июня 2009

На днях я обнаружил функцию FOUND_ROWS() ( здесь ) в MySQL и соответствующую ей опцию SQL_CALC_FOUND_ROWS. Последнее выглядит особенно полезным (вместо выполнения второго запроса для получения количества строк).

Мне интересно, какое влияние на скорость оказывает добавление SQL_CALC_FOUND_ROWS к запросу?

Я предполагаю, что это будет намного быстрее, чем выполнение второго запроса для подсчета строк, но будет ли он совсем другим. Кроме того, я нашел ограничение запроса, чтобы сделать его намного быстрее (например, когда вы получаете первые 10 строк по 1000). Приведет ли добавление SQL_CALC_FOUND_ROWS к запросу с небольшим лимитом, что запрос будет выполняться намного медленнее?

Я знаю, что могу это проверить, но меня интересует общая практика здесь.

Ответы [ 4 ]

2 голосов
/ 21 июня 2009

Для расчета SQL_CALC_FOUND_ROWS запрос будет выполнен так, как если бы не было задано LIMIT, но набор результатов, отправленный клиенту, будет подчиняться LIMIT.


Обновление: для операций COUNT (*), которые будут использовать только индекс, SQL_CALC_FOUND_ROWS медленнее ( ссылка ).

2 голосов
/ 21 июня 2009

Когда я был на MySQL Conference в 2008 году, часть одной сессии была посвящена именно этому - тестам между SQL_CALC_FOUND_ROWS и выполнению отдельной SELECT.

Я полагаю, что результатом было то, что SQL_CALC_FOUND_ROWS не принесло никакой пользы - это было не быстрее, на самом деле это могло быть медленнее. Был и третий путь.

Кроме того, вам не всегда нужна эта информация, поэтому я пошёл бы по дополнительному маршруту запроса.

Я постараюсь найти слайды ...

Редактировать: Хм, Google говорит мне, что я на самом деле LiveBlogged с этого сеанса: http://beerpla.net/2008/04/16/mysql-conference-liveblogging-mysql-performance-under-a-microscope-the-tobias-and-jay-show-wednesday-200pm/. Google выигрывает, когда память не работает.

0 голосов
/ 21 июня 2009

Я бы посоветовал использовать как можно меньше проприетарных расширений SQL при разработке приложения (или вообще не использовать запросы SQL). Выполнение отдельного запроса переносимо, и на самом деле я не думаю, что MySql мог бы лучше получать фактическую информацию, чем повторный запрос. Btw. как упоминается на странице, команда также имеет некоторые недостатки при использовании в реплицируемых средах.

0 голосов
/ 21 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...