powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация WHERE IN
18 сообщений из 18, страница 1 из 1
Оптимизация WHERE IN
    #39292678
Данилко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, имеется запрос (достаю 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
Оптимизация WHERE IN
    #39292701
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данилко,

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

объединённых UNION ALL.
...
Рейтинг: 0 / 0
Оптимизация WHERE IN
    #39292994
Данилко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Оптимизация WHERE IN
    #39292996
Данилко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

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

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

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

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

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

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


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