Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация WHERE IN / 18 сообщений из 18, страница 1 из 1
16.08.2016, 15:46
    #39292678
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Привет, имеется запрос (достаю id записей для френдленты)
Код: sql
1.
SELECT tid FROM bl_topics USE INDEX (forum_id) WHERE forum_id IN (.....)



В IN около 40 айдишек. Индекс создан, в таблице 1кк записей. В итоге запрос выполняется 1,4 секунды, что меня совершенно не устраивает.

Explain запроса https://yadi.sk/i/k5PB29i4uFqhU
Подозреваю, что проблема в том, что mysql обходит весь индекс в поисках нужных строк, и из-за этого возникает проблема. Куда копать? Как можно оптимизировать, какие могут быть альтернативы?
...
Рейтинг: 0 / 0
16.08.2016, 16:09
    #39292701
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Данилко,

Показывайте DDL таблицы с индексом и план в текстовом виде тут.
...
Рейтинг: 0 / 0
16.08.2016, 16:44
    #39292731
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
ДанилкоВ IN около 40 айдишек. [skipped] В итоге запрос выполняется 1,4 секунды, что меня совершенно не устраивает.
Ну перепиши на 40 отдельных запросов
Код: sql
1.
WHERE forum_id='одно значение'

объединённых UNION ALL.
...
Рейтинг: 0 / 0
17.08.2016, 09:06
    #39292994
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
miksoft,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
CREATE TABLE `bl_topics` (
 `tid` int(10) NOT NULL AUTO_INCREMENT,
 `tpage` varchar(250) NOT NULL,
 `tpagen` varchar(250) NOT NULL,
 `taccess` tinyint(3) unsigned NOT NULL DEFAULT '0',
 `title` varchar(250) NOT NULL DEFAULT '',
 `description` varchar(70) DEFAULT NULL,
 `state` varchar(8) DEFAULT NULL,
 `posts` int(10) DEFAULT NULL,
 `starter_id` mediumint(8) NOT NULL DEFAULT '0',
 `start_date` int(10) DEFAULT NULL,
 `last_poster_id` mediumint(8) NOT NULL DEFAULT '0',
 `last_post` int(10) DEFAULT NULL,
 `starter_name` varchar(32) DEFAULT NULL,
 `last_poster_name` varchar(32) DEFAULT NULL,
 `poll_state` varchar(8) DEFAULT NULL,
 `last_vote` int(10) DEFAULT NULL,
 `views` int(10) DEFAULT NULL,
 `forum_id` int(10) unsigned NOT NULL DEFAULT '0',
 `pinned` tinyint(1) DEFAULT NULL,
 `total_votes` int(5) NOT NULL DEFAULT '0',
 `awards_status` tinyint(1) DEFAULT '0',
 `f_pid` int(10) unsigned NOT NULL DEFAULT '0',
 `f_post` text NOT NULL,
 `bl_image` varchar(64) NOT NULL ,
 `user_like` mediumint(8) unsigned NOT NULL DEFAULT '0',
 `user_unlike` mediumint(8) unsigned NOT NULL DEFAULT '0',
 `liveline` tinyint(3) unsigned NOT NULL DEFAULT '0',
 `on_wall` tinyint(3) unsigned NOT NULL DEFAULT '0',
 `tmp_topic` mediumint(8) unsigned NOT NULL DEFAULT '0',
 `get_cup` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `topic_plus` mediumint(8) unsigned NOT NULL DEFAULT '0',
 `topic_minus` mediumint(8) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`tid`),
 KEY `last_post` (`last_post`),
 KEY `tpage` (`tpage`),
 KEY `taccess` (`taccess`),
 KEY `starter_id` (`starter_id`),
 KEY `blogs` (`forum_id`,`taccess`,`starter_id`),
 KEY `f_pid` (`f_pid`),
 KEY `liveline` (`liveline`),
 KEY `on_wall` (`on_wall`),
 KEY `start_date` (`start_date`),
 KEY `liveline_idx` (`taccess`,`liveline`,`tid`),
 KEY `profile_idx` (`forum_id`,`taccess`),
 KEY `forum_id` (`forum_id`),
 KEY `reputation` (`tid`,`forum_id`),
 KEY `friendsline_idx_2` (`forum_id`,`taccess`,`on_wall`,`pinned`,`last_post`),
 KEY `friendsline_idx_1` (`forum_id`,`on_wall`,`tid`),
 KEY `friendsline_idx` (`forum_id`,`on_wall`,`taccess`,`tid`),
 KEY `tpagen` (`tpagen`)
) ENGINE=InnoDB AUTO_INCREMENT=1387076 DEFAULT CHARSET=cp1251
...
Рейтинг: 0 / 0
17.08.2016, 09:06
    #39292996
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Akina,

не спасло, еще больше время генерации в итоге
...
Рейтинг: 0 / 0
17.08.2016, 09:10
    #39293002
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Данилкоеще больше время генерации в итоге
Сколько времени затрачивается на выборку по одному значению forum_id? Сколько в среднем отбирает записей такой запрос? И сколько времени требует объединяющий запрос (и укажите точно, сколько в нём компонентов).
...
Рейтинг: 0 / 0
17.08.2016, 09:24
    #39293020
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
27к записей соответствуют условию?
...
Рейтинг: 0 / 0
17.08.2016, 09:34
    #39293026
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Hett,

да, в таблице около 1кк записей
...
Рейтинг: 0 / 0
17.08.2016, 09:36
    #39293027
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Akina,

для одной записи mySQL time: 0.03989
объединяющий запрос на 37 айдишек занял:
18662 rows in set (2.35 sec)
...
Рейтинг: 0 / 0
17.08.2016, 09:38
    #39293029
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
А Вы точно замеряете именно время выполнения запроса, а не плюс время передачи его результата на клиента?
Проверьте статистику по времени выполнения непосредственно на консоли сервера.
...
Рейтинг: 0 / 0
17.08.2016, 09:39
    #39293031
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
О!
Данилкообъединяющий запрос на 37 айдишек занял:
18662 rows in set (2.35 sec)
В запросе точно именно UNION ALL ? а не просто UNION?
...
Рейтинг: 0 / 0
17.08.2016, 09:43
    #39293035
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Akina,

mySQL time: 0.08
отлично) спасибо)
...
Рейтинг: 0 / 0
17.08.2016, 13:56
    #39293287
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Akina,

нет, вру, из кеша был запрос, по 2-3 секунды c UNION ALL хавает
...
Рейтинг: 0 / 0
17.08.2016, 13:58
    #39293290
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Может просто сам мускуль потюнить надо?
...
Рейтинг: 0 / 0
17.08.2016, 14:07
    #39293296
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Данилкопо 2-3 секунды c UNION ALL хаваетОчень хочется предположить, что серверу мозгов (ну то есть памяти) явно не в достатке...
...
Рейтинг: 0 / 0
17.08.2016, 14:09
    #39293297
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Akina, Hett

а на какие параметры сервера, мускула смотреть?
...
Рейтинг: 0 / 0
17.08.2016, 14:31
    #39293314
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Код: sql
1.
innodb-buffer-pool-size
...
Рейтинг: 0 / 0
17.08.2016, 14:51
    #39293332
Данилко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация WHERE IN
Hett,
innodb_buffer_pool_size 6341787648
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация WHERE IN / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]