2016-12-06 3 views
2

Итак, какова наилучшая практика, когда дело доходит до разбивки на страницы в mysql. Позвольте мне сделать это более ясным, допустим, что в данное время у меня 2000 записей, и есть больше вставленных. И я показываю 25 за раз, я знаю, что мне нужно использовать лимит для разбивки по страницам. Но что я должен делать для общего количества моих записей? Я рассчитываю записи каждый раз, когда пользователи нажимают, чтобы запросить следующие 25 записей. Пожалуйста, не говорите мне ответ прямо, а скорее укажите мне в правильном направлении. Благодаря!Производительность запросов MySQL для разбивки на страницы

ответ

0

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

SELECT * 
FROM yourTable 
ORDER BY someCol 
LIMIT 25 
OFFSET 100 

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

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

Если в вашей таблице есть столбец даты или времени, представляющий, когда была добавлена ​​запись, вы можете фактически ограничить весь результирующий набор до моментального снимка во времени. В этом случае вы можете предотвратить ввод новых данных за определенный сеанс.

+0

Спасибо! Но меня больше беспокоит производительность. Должен ли я каждый раз читать? Как это делают крупные компании. Я не думаю, что они подсчитывают каждый раз, когда пользователи переходят на следующую страницу! – Jonathan

+0

@ Джонатан Вам даже не нужно подсчитывать AFAIK. Просто выберите размер страницы и попробуйте выполнить запрос. Когда вы ничего не получите, вы знаете, что вы превысили размер стола. В любом случае, как вы указали, размер таблицы постоянно меняется. –

+0

Это правда, но как показать пользователям, как страницы могут смотреть на них? – Jonathan

0

3 precgestions 1. Только обновление сетки данных при нажатии следующей кнопки с помощью ajax (или) сохранения счетчика в сеансе для выбранных параметров поиска. 2. Используя расширенный memcache, он может быть доступен для всех пользователей. Создайте уникальный ключ на основе параметров фильтра и сохраните счетчик. Таким образом, вы не попадете в базу данных. Когда новая запись добавляется, вам необходимо очистить существующий ключ memcache. Для этого требуется запуск memache. 3. Создайте индексирование, и если вы нажмете дБ для получения счета в одиночку. Не будет никакого влияния на производительность.

Смежные вопросы