Извлечение MySQL таблицы PHP медленно - PullRequest
0 голосов
/ 26 августа 2011

У меня довольно большая таблица, которая занимает от 10-20 секунд до fetch в зависимости от запроса. Это делает сайт более медленным из-за этого.

Я думал об использовании LIMIT для ограничения количества результатов и использовании ajax для отображения всей таблицы по битам.

Сейчас я использую ajax для отображения всей таблицы сразу.

Я думаю сделать что-то подобное ...

Backend:

 $offset = 0;
 $rowsToFetch = 100;
 {
   //Loop
   $query = "SELECT * FROM TABLE_NAME LIMIT $offset, $rowsToFetch"
   $offset = +100;
   $rowsToFetch = +100;
 }

Frontend:

Call ajax function that will call the back end part recursively and display part by part until finished.

Я уверен, что это немного сложнее, чем это.

Есть ли лучший способ сделать это? Есть идеи как начать? Подводные камни для поиска?

P.S. Я не хочу использовать нумерацию страниц. Я хочу отобразить все на одной странице (Преимущества: CTRL + F)

Edit: выборка в database(command line) занимает около 5-7 секунд. Но на сайте отображение записей занимает около 10-20 секунд. Запрос занимает около 4-5 секунд. Я рассчитал отдельные разделы страницы, чтобы определить это.

Ответы [ 7 ]

1 голос
/ 26 августа 2011

Это не ускорит сам запрос, потому что первое, что делает mysql, реализует весь запрос, а после этого он просто получает необходимое количество результатов.Попробуйте вместо этого использовать nidexes или исключить номер соединения, попробуйте несколько простых запросов.

0 голосов
/ 26 августа 2011

Сжимаете ли вы ответ HTTP? Можно ли кэшировать данные на клиенте?

0 голосов
/ 26 августа 2011

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

0 голосов
/ 26 августа 2011

P.S. Я не хочу использовать нумерацию страниц. Я хочу отобразить все в одна страница (Преимущества: CTRL + F) На вашем месте я бы спросил себя: интересно, захотят ли пользователи приложения разбивать на страницы или нет.

Поскольку я считаю, что вы не хотите разбивать на страницы, но вряд ли средний пользователь хочет, чтобы ваше приложение отображало все на одной странице, чтобы иметь возможность использовать Ctrl + F.

Я также считаю, что ваш обычный пользователь не только хочет иметь страницы с нумерацией страниц, но также хочет иметь какую-то функциональность поиска.

0 голосов
/ 26 августа 2011

Выборка по частям будет еще медленнее. Запрос LIMIT с предложением order-by по-прежнему должен обрабатывать все строки в таблице (таблицах), чтобы результаты можно было упорядочить должным образом, после чего применяется LIMIT. Другими словами, если у вас есть 10000 строк и выбирается 100 одновременно, вы бы заставили базу данных выполнить 100 полных запросов. Другими словами, обработка данных на 1 000 000 строк позволяет получить 10000 - 1% эффективности с точки зрения числа найденных строк. ряды обслуживаются.

Что вам нужно сделать, это использовать ответ multipart / x-mixed-replace и отправлять фрагменты ответа, когда ваш скрипт их выбирает / обрабатывает. Это позволяет вам выполнить один запрос и по-прежнему обслуживать все это в легко усваиваемых кусках.

0 голосов
/ 26 августа 2011

Сколько записей в нем содержится? 20 секунд очень долго для такого запроса. Но в зависимости от того, как вы его измерили, вы получаете не только сам запрос, но и трафик передачи результатов клиенту.

Вы можете попытаться очистить результаты, пока вы обрабатываете результаты запроса, но я сомневаюсь, что это поможет вам при использовании Ajax. Результаты будут обработаны только после завершения запроса.

0 голосов
/ 26 августа 2011

Используйте нумерацию страниц, если нет необходимости показывать такой большой стол на одной странице.

...