|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.09.2011, 13:19 | #1 |
Регистрация: 27.08.2011
Сообщений: 8
|
Как можно уменьшить время выполнения запроса.
Добрый день!
Есть каталог продукции состоящий из 40 000 000 наименований. Выводится он в виде двойного пагинатора, примерно следующего вида: ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678 9 ... запись N; ... << < Страница 1 из N > >> Т.е. сначала идет выборка по первой букве, а потом постранично по 500 наименований на страницу. Код выглядит так: PHP код:
Спасибо! |
06.09.2011, 14:33 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
LIMIT тут вообще не при чем - тормозит LIKE на ваших 40 лямах записей.
Теоретически может помочь FULLTEXT - но на практике реально лучше "домашний" вариант горизонтального масштабирования - разделение данных. |
06.09.2011, 16:26 | #3 |
Регистрация: 27.08.2011
Сообщений: 8
|
|
06.09.2011, 16:51 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Можно разбить на несколько таблиц - вплоть до "по-буквенных" таблиц - с вашим-то кол-вом записей...
А можно разбить диапазонами - A-F, G-L, ... Чтоб не трогать оригинальную таблицу - можно сделать по такому же принципу несколько связанных таблиц формата ID - name (также, по-буквенно или диапазоном): ID - id записи в основной таблице name - название товара(для алфавитной сортировки в выдаче) Если это будет диапазон букв - то можно добавить поле letter - буква в диапазоне. Проиндексировать всё это дело, конечно. Тогда выборки по алфавитной пагинации будут идти через разбитые таблицы(только из нужной буквы/диапазона, а не из 40млн.), а выборки по числовой пагинации - по основной таблице(по ID - я так понимаю). Естественно - это увеличит количество запросов, зато ускорит их обработку. Ну и при добавлении/редактировании(названия) нужно не забыть проапдейтить эти связанные таблицы. |
07.09.2011, 15:55 | #5 |
Регистрация: 27.08.2011
Сообщений: 8
|
Andkorol, спасибо за совет!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вывести время выполнения операции. | Dasharnb777 | Общие вопросы .NET | 3 | 05.12.2010 16:38 |
Как можно уменьшить ширину видеоролика youtube размещенного на dle сайте | justalex | HTML и CSS | 0 | 05.11.2010 14:01 |
время выполнения SOAP запроса | hotman | Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) | 0 | 04.06.2009 13:32 |
Меня интересует проблема перегрева видеокарты... Как можно уменьшить её нагрев?? | ЕвгениуS | Компьютерное железо | 13 | 21.07.2008 15:35 |
Как замерить время выполнения программы | Gracel | Общие вопросы Delphi | 5 | 12.06.2007 22:16 |