Codeigniter нумерации избегать LIMIT с OFFSET - PullRequest
1 голос
/ 23 августа 2011

Следует ли в любом случае избегать использования LIMIT $ page, $ offset при извлечении строк в нумерации страниц кода?

Когда я использую ограничение со смещением для записей в миллионах, например, при получении запроса LIMIT 300000,45 требуется примерно на 6 секунд больше, чем при получении LIMIT 45,45

Какой самый лучший и быстрый способ разбить записи на страницы?

спасибо:)

Мой стол выглядит так:

id (AUTO) | имя пользователя | пароль | электронная почта

Я использовал простой запрос:

SELECT * FROM таблицы ORDER_BY имя пользователя ASC LIMIT 300000,45

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

К сожалению, из-за того, как работает лимит, вам в основном необходимо перебрать набор результатов и найти N-й элемент (в данном случае 300 000).Это операция O (n).Конечно, это делается через базу данных, так что это намного эффективнее, но все равно O (n), и смещение в 1 миллион будет все же медленнее, чем смещение 1.

Теперь,Вы можете ускорить процесс, поместив индекс на имя пользователя.Я предполагаю, что в настоящее время их нет, и это могло бы объяснить некоторое расхождение между этими двумя моментами, но независимо от того, что вам все еще нужно для просмотра записей по 300 тыс., Так что даже если c очень мало в O (C* n), это все равно будет O (n).

3 голосов
/ 23 августа 2011

В случае LIMIT 45, 45 вы выбираете 45 строк со смещением 45, тогда как LIMIT 45, 300000 ограничивает 300000 строк из смещения 45. Это может объяснить проблему скорости.

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