|
|
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
Имеется большая таблица архивов по времени, и мне необходимо организовать постраничный вывод, у меня сомнения по поводу оператора LIMIT Лучше обрезать страницы во WHERE, высчитывать постоянно временной промежуток или использовать LIMIT c диапазоном. Меня смущает в пересчете LIMIT, к примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60? Надеюсь понятно объяснил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 09:41:26 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlovк примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?Возможны оба варианта, причём первый более вероятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 09:46:06 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
Akinadarlovк примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60?Возможны оба варианта, причём первый более вероятен.Хм, а при каких условиях может сработать второй вариант? Имхо, только первый. Если, конечно, в результате отбора записей их будет достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:38:19 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
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, о котором дока стыдливо молчит. Второе - неясность, что за запрос и на каком материале, есть ли там вообще подходящий индекс... но всё равно хоть какой-то шанс, да остаётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:51:42 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
miksoftХм, а при каких условиях может сработать второй вариант? Отбрасывать первые 6000 записей и после выбрать 60. Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести. Просто во многих блогах пример про постраничный вывод приводят с LIMIT. Вот и засомневался в целесообразности этого метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:53:49 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlov, сейчас протестировал на сервере, запрос с LIMIT offset, rows отработал медленней, получается он прогоняет весь offset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:57:14 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlov , "встретится" и "может сработать" - это две о-о-очень большие разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:58:03 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlovпротестировал на сервере, запрос с LIMIT offset, rows отработал медленней А позвольте полюбопытствовать, какие значения были взяты? и сколько было проведено тестов - два или три? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 10:59:21 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlovmiksoftХм, а при каких условиях может сработать второй вариант? Отбрасывать первые 6000 записей и после выбрать 60. Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести. Просто во многих блогах пример про постраничный вывод приводят с LIMIT. Вот и засомневался в целесообразности этого метода.Это и есть первый вариант. Чтобы в этом случае сработал второй, MySQL должен понимать ваше "Если дискретность таблицы минута, то 6000 минут пропустить и после него час вывести", чего у него явно нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 11:15:12 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
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 вполне сможет прочитать их из индекса (при условии что остальное содержимое запроса этому не помешает). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 11:19:06 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
Вот мой небольшой тест, дискретность таблицы минута, выбираю 100 страницу. Если я что то не учел, объясните пожалуйста, но как видно, что выборка по времени быстрей, LIMIT проходит Код: sql 1. 2. 3. 4. 5. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 13:39:08 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlov, Конечно, ручной отбор записей с условием по индексу будет быстрее, чем просто LIMIT. Но для этого пришлось менять условие в секции WHERE. Если вы уверены в своих данных, то, конечно, такой подход более предпочтителен. И, кстати, в первом запросе забыли ORDER BY t0.date_time. Да и во втором не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 13:53:50 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
darlovИмеется большая таблица архивов по времени, и мне необходимо организовать постраничный вывод, у меня сомнения по поводу оператора LIMIT Лучше обрезать страницы во WHERE, высчитывать постоянно временной промежуток или использовать LIMIT c диапазоном. Меня смущает в пересчете LIMIT, к примеру LIMIT 6000,60, mysql переберет первые все 6060 или только 60? Надеюсь понятно объяснил. Это лучше делать, просто FETCh-а данные и выводя их на страницу. Потому -- приостановка, потом -- снова FETCH на новую страницу, и так далее. Если ты будешь использовать ORDER BY/ LIMIT то будут обрабатываться все данные (сортироваться и/или читаться до какого-то места), а только затем выделяться кусок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 16:28:45 |
|
||
|
Постраничный вывод
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто лучше делать, просто FETCh-а данные и выводя их на страницу. Потому -- приостановка, потом -- снова FETCH на новую страницу, и так далее.Если это веб-интерфейс (а где еще может понадобиться постраничное отображение?), то "снова FETCH на новую страницу" уже так просто не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2013, 16:53:56 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=208&tid=1836032]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 345ms |

| 0 / 0 |
