реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ускорить большую выборку таблицы InnoDB в MySQL
Alt.F4
сообщение Aug 17 2013, 16:49
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Здравствуйте.
Подскажите, пожалуйста, как можно ускорить выборку из InnoDB?
Вся таблица находится в СОЗУ, одна строка имеет размер около 100байт, в таблице 30тыс строк (размер таблицы около 3Мб).
Выборка всех строк длится более 30сек. wacko.gif
Спасибо.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Aug 17 2013, 18:36
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Стоит задать себе вопрос, кому нужно иметь сразу все 30000 строк? Вы их всё равно все сразу не увидите и они нужны как правило либо по какому-то критерию, либо постранично.
Короче, я ничё не знаю про InnoDB (можете попробовать другой бэкенд использовать, вдруг быстрее будет), но средствами SQL с заданными условиями ничё ускорить не получится. Остаются средства аппаратные (поставить проц шустрее), попробовать другой движок БД (даже если и ускорит, то незначительно).
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Aug 17 2013, 20:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



andrewlekar, на самом деле нужно до 100тыс строк сразу, но дело не в этом.
Чтобы я проект писал с нуля, то взял бы за основу BerkeleyDB, где такая выборка вообще не нагрузка, а так приходится допиливать что есть.

Я просто въехать не могу, как из оперативки 3Мб могут читать 35сек? Космос! cranky.gif
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Aug 17 2013, 22:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



У меня таблица - 20Мб. Где то 500 тыс.строк, 8 полей.
Выборка 8т строк - 1-2 сек. А случаем не в mysql-client выводишь построчно? Если да, то 35 секунд это не сама выборка...
Go to the top of the page
 
+Quote Post
Tiro
сообщение Aug 17 2013, 23:54
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Alt.F4 @ Aug 17 2013, 23:35) *
Чтобы я проект писал с нуля, то взял бы за основу BerkeleyDB, где такая выборка вообще не нагрузка, а так приходится допиливать что есть.

Ненене, только не это. В ней даже индексов нет.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Aug 18 2013, 05:30
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



MKdemiurg, во всем участвует еще Apache, но разве он будет так тормозить процесс?
Tiro, наблюдал сумасшедшие выборки, все летает.

Сообщение отредактировал Alt.F4 - Aug 18 2013, 07:05
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Aug 18 2013, 06:57
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(Alt.F4 @ Aug 18 2013, 08:30) *
MKdemiurg, во всем участвует еще Apache, но разве он будет так тормозить процесс?

Дык,а почему бы и нет?
Апач вобще штука глючная.
Просто попробуйте неапач ,чтобы проверить. NGINX например.
ЗЫ А индексы по полям выборки стоят? У меня например таблица разбивается на 50 уникальных индексов + индекс по времени. ПОлучается, что запрос реально происходит не из 500т строк, а из 5-10. Без них минимум в 10 раз дольше выборка.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Aug 18 2013, 07:01
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



MKdemiurg, морознул немного, попробовал выполнить тот же запрос вне всяких оболочек через php с выводом времени, вышло около 3сек.
Буду искать затык в "быдлокоде"...

Что касается индексов, то они будут сильно тормозить процесс добавления новых данных (до сотни в 1сек) + лишний объем.
А такие огромные выборки весьма редки, в основном десяток последних данных, поэтому индексы тут не пойдут.

Цитата
Апач вобще штука глючная.
Просто попробуйте неапач ,чтобы проверить. NGINX например.
Я бы с радостью заменил Apache, но ничего другого не нашел для динамического контента.

Кстати, по размеру InnoDB, попробовал ради эксперимента сменить тип таблицы на Archive Storage Engine, объем уменьшился в сотни раз, а скорость выборки осталась таже.
Очень остро стоит вопрос в размещении всей таблицы в СОЗУ, может заюзать лучше Archive Storage Engine?

Сообщение отредактировал Alt.F4 - Aug 18 2013, 07:21
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Aug 18 2013, 07:57
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(Alt.F4 @ Aug 18 2013, 10:01) *
Кстати, по размеру InnoDB, попробовал ради эксперимента сменить тип таблицы на Archive Storage Engine, объем уменьшился в сотни раз, а скорость выборки осталась таже.
Очень остро стоит вопрос в размещении всей таблицы в СОЗУ, может заюзать лучше Archive Storage Engine?

Лучше спросить тут http://sqlinfo.ru/
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016