Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Постраничный вывод / 14 сообщений из 14, страница 1 из 1
17.09.2013, 09:41:26
    #38398364
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
Имеется большая таблица архивов по времени, и мне необходимо организовать постраничный вывод, у меня сомнения по поводу оператора LIMIT
Лучше обрезать страницы во WHERE, высчитывать постоянно временной промежуток или использовать LIMIT c диапазоном.
Меня смущает в пересчете LIMIT, к примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?
Надеюсь понятно объяснил.
...
Рейтинг: 0 / 0
17.09.2013, 09:46:06
    #38398371
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlovк примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?Возможны оба варианта, причём первый более вероятен.
...
Рейтинг: 0 / 0
17.09.2013, 10:38:19
    #38398429
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
Akinadarlovк примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?Возможны оба варианта, причём первый более вероятен.Хм, а при каких условиях может сработать второй вариант?
Имхо, только первый. Если, конечно, в результате отбора записей их будет достаточно.
...
Рейтинг: 0 / 0
17.09.2013, 10:51:42
    #38398447
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
miksoftпри каких условиях может сработать второй вариант?
Имхо, только первый.
Я верю документации. А она утверждает, что
авторIf you are selecting only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.
Правда, тут есть два НО. Первое - наличие offset, о котором дока стыдливо молчит. Второе - неясность, что за запрос и на каком материале, есть ли там вообще подходящий индекс... но всё равно хоть какой-то шанс, да остаётся.
...
Рейтинг: 0 / 0
17.09.2013, 10:53:49
    #38398451
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
miksoftХм, а при каких условиях может сработать второй вариант?

Отбрасывать первые 6000 записей и после выбрать 60. Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести.
Просто во многих блогах пример про постраничный вывод приводят с LIMIT. Вот и засомневался в целесообразности этого метода.
...
Рейтинг: 0 / 0
17.09.2013, 10:57:14
    #38398458
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlov, сейчас протестировал на сервере, запрос с LIMIT offset, rows отработал медленней, получается он прогоняет весь offset
...
Рейтинг: 0 / 0
17.09.2013, 10:58:03
    #38398460
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlov , "встретится" и "может сработать" - это две о-о-очень большие разницы.
...
Рейтинг: 0 / 0
17.09.2013, 10:59:21
    #38398462
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlovпротестировал на сервере, запрос с LIMIT offset, rows отработал медленней
А позвольте полюбопытствовать, какие значения были взяты? и сколько было проведено тестов - два или три?
...
Рейтинг: 0 / 0
17.09.2013, 11:15:12
    #38398487
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlovmiksoftХм, а при каких условиях может сработать второй вариант?

Отбрасывать первые 6000 записей и после выбрать 60. Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести.
Просто во многих блогах пример про постраничный вывод приводят с LIMIT. Вот и засомневался в целесообразности этого метода.Это и есть первый вариант. Чтобы в этом случае сработал второй, MySQL должен понимать ваше "Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести", чего у него явно нет.
...
Рейтинг: 0 / 0
17.09.2013, 11:19:06
    #38398496
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
Akinamiksoftпри каких условиях может сработать второй вариант?
Имхо, только первый.
Я верю документации. А она утверждает, что
авторIf you are selecting only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.
Правда, тут есть два НО. Первое - наличие offset, о котором дока стыдливо молчит. Второе - неясность, что за запрос и на каком материале, есть ли там вообще подходящий индекс... но всё равно хоть какой-то шанс, да остаётся.Это говорит лишь о методе доступа к данным, но не о том, что первые 6000 записей будут волшебным образом пропущены.
Если записей, например, миллионы, то 6060 - это вполне few rows и MySQL вполне сможет прочитать их из индекса (при условии что остальное содержимое запроса этому не помешает).
...
Рейтинг: 0 / 0
17.09.2013, 13:39:08
    #38398848
darlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
Вот мой небольшой тест, дискретность таблицы минута, выбираю 100 страницу.
Если я что то не учел, объясните пожалуйста, но как видно, что выборка по времени быстрей, LIMIT проходит
Код: sql
1.
2.
3.
4.
5.
SELECT t0.date_time, t0.value AS val84
FROM tbl_tag_data_min t0
WHERE t0.date_time >1378089349  AND t0.date_time <1378089349+(3600*100)+3600 AND t0.id_tag_data_Kip=88
LIMIT 6000,60;
/* Affected rows: 0  Найденные строки: 60  Предупреждения: 0  Длительность  1 query: 0,844 sec. */



Код: sql
1.
2.
3.
4.
5.
SELECT t0.date_time, t0.value AS val84
FROM tbl_tag_data_min t0
WHERE t0.date_time > 1378089349+(3600*100)  AND  t0.date_time <1378089349+(3600*100)+3600 AND t0.id_tag_data_Kip=88
;
/* Affected rows: 0  Найденные строки: 60  Предупреждения: 0  Длительность  1 query: 0,172 sec. */


...
Рейтинг: 0 / 0
17.09.2013, 13:53:50
    #38398870
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlov,


Конечно, ручной отбор записей с условием по индексу будет быстрее, чем просто LIMIT. Но для этого пришлось менять условие в секции WHERE. Если вы уверены в своих данных, то, конечно, такой подход более предпочтителен.


И, кстати, в первом запросе забыли ORDER BY t0.date_time. Да и во втором не помешает.
...
Рейтинг: 0 / 0
17.09.2013, 16:28:45
    #38399094
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
darlovИмеется большая таблица архивов по времени, и мне необходимо организовать постраничный вывод, у меня сомнения по поводу оператора LIMIT
Лучше обрезать страницы во WHERE, высчитывать постоянно временной промежуток или использовать LIMIT c диапазоном.
Меня смущает в пересчете LIMIT, к примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?
Надеюсь понятно объяснил.


Это лучше делать, просто FETCh-а данные и выводя их на страницу. Потому -- приостановка, потом -- снова FETCH на новую страницу, и так далее.

Если ты будешь использовать ORDER BY/ LIMIT то будут обрабатываться все данные (сортироваться и/или читаться до какого-то места), а только затем выделяться кусок.
...
Рейтинг: 0 / 0
17.09.2013, 16:53:56
    #38399132
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод
MasterZivЭто лучше делать, просто FETCh-а данные и выводя их на страницу. Потому -- приостановка, потом -- снова FETCH на новую страницу, и так далее.Если это веб-интерфейс (а где еще может понадобиться постраничное отображение?), то "снова FETCH на новую страницу" уже так просто не получится.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Постраничный вывод / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]