powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимизировать запрос с псевдонимами
24 сообщений из 24, страница 1 из 1
Как оптимизировать запрос с псевдонимами
    #38807767
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, оптимизироватьь запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select `str`.* from
(
SELECT `k-t_s`.`id_n` , GROUP_CONCAT(`k-t_s`.`id_s` order by `k-t_s`.`id_s` separator '') `sostav`
FROM `k-t_s`
group by `k-t_s`.`id_n`
) `str`
group by `str`.`sostav`



id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 376086 Using temporary; Using filesort
2 DERIVED k-t_s index NULL sost 8 NULL 5926718 Using index

CREATE TABLE IF NOT EXISTS `k-t_s` (
`id_sv` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`id_n` int(10) unsigned zerofill NOT NULL,
`id_s` int(10) unsigned zerofill NOT NULL,
PRIMARY KEY (`id_sv`),
UNIQUE KEY `sost` (`id_n`,`id_s`),
KEY `id_s` (`id_s`),
KEY `id_n` (`id_n`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Связи для кириллицы' AUTO_INCREMENT=5948926 ;
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38807837
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тут нечего оптимизировать.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38807854
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА тут нечего оптимизировать.А я бы попробовал...

Для начала - зачем нужно поле `id_sv` ?
Если таблица нужна только для связи и ни для чего более, то я бы переделал ее так:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `k-t_s` (
`id_n` int(10) unsigned zerofill NOT NULL,
`id_s` int(10) unsigned zerofill NOT NULL,
PRIMARY KEY (`id_n`,`id_s`),
KEY `sost` (`id_s`,`id_n`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Связи для кириллицы' AUTO_INCREMENT=5948926 ; 

Что даст сокращение хранимого объема примерно в пару раз.

Возможно, в индексе `sost` будет достаточно одного поля `id_s`, зависит от запросов и/или от некоторых подробностей устройства InnoDB, которые я с ходу не помню.


Далее - если таблица часто и много изменяется, то неплохо бы ей периодически делать OPTIMIZE.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808020
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft , ТС просил вроде оптимизацию именно запроса, а не структуры.
Опять же именно этот запрос не обращается к таблице, ибо используется покрывающий индекс, так что для данного запроса наличие дополнительных полей совершенно сиренево.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808059
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaОпять же именно этот запрос не обращается к таблице, ибо используется покрывающий индекс, так что для данного запроса наличие дополнительных полей совершенно сиренево.Не совершенно. В моем варианте даже конкретно этот индекс становится меньше в полтора раза.
Уж не говоря о том, что в пару раз снижается общая индексируемая масса по этой таблице, что повышает шансы нахождения нужного индекса в кэше.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808404
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, нужно подумать про удаление столбца с номером связей. Он на всякий случай был создан при проектированиии бд, но реально так и не использовался.
Ну, если нельзя оптимизировать запрос, то, может денормализировать как-то таблицу, а то этот запрос зависает в бесконечности?
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808417
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, имхо, опасно в качестве сепаратора использовать пустую строку. Во внешней группировке получим, что "1"+"2" = "12", что не похоже на задуманное.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808427
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно попытаться сократить используемые типы данных. Например, вместо 4-хбайтовых целых использовать 3-х, 2-х и даже однобайтовые, если то позволяют фактически данные.

И нужно посмотреть на размер буферов в памяти для сортировки, чтобы она не вываливалась на диск.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808477
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если оптимизировать структуру, я бы порекомендовал избавиться от zerofill. Ведь эти паразитные нули добавляются и в group_concat, изрядно утяжеляя данные (правда, в этом случае как раз пустая строка в качестве сепаратора вполне нормально работает). Нули может добавлять и клиентская часть, отображение в нужном формате - это её забота.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808519
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaизбавиться от zerofill. Ведь эти паразитные нули добавляются и в group_concat, изрядно утяжеляя данныеДа, это момент я прозевал. Присоединяюсь к рекомендации.

Мой пост выше ( 16859107 ) относился именно к случаю без zerofill.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808748
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, ребята, буду ковыряться. Отпишусь потом, что получилось.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38808974
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моим расчётам, этот запрос будет выполняться часа четыре. Это нормально?
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809021
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

Посмотрите, создаются ли временные файлы при выполнении запроса. Обычно в /tmp.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809061
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, создаются. Ведь подзапрос заставит слить на диск фактически всю таблицу - всё-таки 6 миллионов записей, в память фиг влезет.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809062
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку внешний запрос всё равно "ниачём" - случайное значение поля, - разумнее подумать о предварительной фильтрации для получения только реально нужных данных. В подзапросе.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809092
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaКонечно, создаются. Ведь подзапрос заставит слить на диск фактически всю таблицу - всё-таки 6 миллионов записей, в память фиг влезет.Записи совсем коротенькие, могут и влезть.

Можно, кстати, попробовать принудительно в память запихнуть - в MEMORY таблицу. Правда, у нее, имхо, расход памяти больше окажется. Или, по крайне мере, не меньше.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809159
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЗаписи совсем коротенькие
INT(10) ZEROFILL - 10 байт на запись, 60 мегабайт всего. А дефолтно
tmp_table_size=11M
sort_buffer_size=256K
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809967
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaПоскольку внешний запрос всё равно "ниачём" - случайное значение поля, - разумнее подумать о предварительной фильтрации для получения только реально нужных данных. В подзапросе.
Как это ни о чём?
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38809970
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень просто.
Подзапрос, возможно, даст тебе несколько разных id_n с одинаковым sostav. Как думаешь, какой из id_n будет в выходном наборе?
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38810089
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, ну если в этом дело, то это по-барабану, главное от дубликатов избавиться, а какие остануться — не важно. Тут это даже и не закладывалось.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38810131
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев.
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38810323
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТак если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев.
Слоны, они такие незаметные)))
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38810339
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaТак если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев.А разве это что-то изменит, кроме экономии 4 байт на запись во временной таблице?
...
Рейтинг: 0 / 0
Как оптимизировать запрос с псевдонимами
    #38810395
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftА разве это что-то изменит, кроме экономии 4 байт на запись во временной таблице?Ну... курочка по зёрнышку клюёт - а весь двор в дерьме.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимизировать запрос с псевдонимами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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