|
|
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, оптимизироватьь запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 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 ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 04:42:27 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
А тут нечего оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 09:05:16 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaА тут нечего оптимизировать.А я бы попробовал... Для начала - зачем нужно поле `id_sv` ? Если таблица нужна только для связи и ни для чего более, то я бы переделал ее так: Код: sql 1. 2. 3. 4. 5. 6. Что даст сокращение хранимого объема примерно в пару раз. Возможно, в индексе `sost` будет достаточно одного поля `id_s`, зависит от запросов и/или от некоторых подробностей устройства InnoDB, которые я с ходу не помню. Далее - если таблица часто и много изменяется, то неплохо бы ей периодически делать OPTIMIZE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 09:38:01 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
miksoft , ТС просил вроде оптимизацию именно запроса, а не структуры. Опять же именно этот запрос не обращается к таблице, ибо используется покрывающий индекс, так что для данного запроса наличие дополнительных полей совершенно сиренево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 11:32:02 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaОпять же именно этот запрос не обращается к таблице, ибо используется покрывающий индекс, так что для данного запроса наличие дополнительных полей совершенно сиренево.Не совершенно. В моем варианте даже конкретно этот индекс становится меньше в полтора раза. Уж не говоря о том, что в пару раз снижается общая индексируемая масса по этой таблице, что повышает шансы нахождения нужного индекса в кэше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 12:06:57 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Да, нужно подумать про удаление столбца с номером связей. Он на всякий случай был создан при проектированиии бд, но реально так и не использовался. Ну, если нельзя оптимизировать запрос, то, может денормализировать как-то таблицу, а то этот запрос зависает в бесконечности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 14:52:07 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Кстати, имхо, опасно в качестве сепаратора использовать пустую строку. Во внешней группировке получим, что "1"+"2" = "12", что не похоже на задуманное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 14:58:26 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Еще можно попытаться сократить используемые типы данных. Например, вместо 4-хбайтовых целых использовать 3-х, 2-х и даже однобайтовые, если то позволяют фактически данные. И нужно посмотреть на размер буферов в памяти для сортировки, чтобы она не вываливалась на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:02:12 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Если оптимизировать структуру, я бы порекомендовал избавиться от zerofill. Ведь эти паразитные нули добавляются и в group_concat, изрядно утяжеляя данные (правда, в этом случае как раз пустая строка в качестве сепаратора вполне нормально работает). Нули может добавлять и клиентская часть, отображение в нужном формате - это её забота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:21:17 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Akinaизбавиться от zerofill. Ведь эти паразитные нули добавляются и в group_concat, изрядно утяжеляя данныеДа, это момент я прозевал. Присоединяюсь к рекомендации. Мой пост выше ( 16859107 ) относился именно к случаю без zerofill. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 15:49:31 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Спасибо, ребята, буду ковыряться. Отпишусь потом, что получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 19:03:24 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
По моим расчётам, этот запрос будет выполняться часа четыре. Это нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 01:29:39 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
andrejk, Посмотрите, создаются ли временные файлы при выполнении запроса. Обычно в /tmp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 07:29:10 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Конечно, создаются. Ведь подзапрос заставит слить на диск фактически всю таблицу - всё-таки 6 миллионов записей, в память фиг влезет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 09:05:32 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Поскольку внешний запрос всё равно "ниачём" - случайное значение поля, - разумнее подумать о предварительной фильтрации для получения только реально нужных данных. В подзапросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 09:07:36 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaКонечно, создаются. Ведь подзапрос заставит слить на диск фактически всю таблицу - всё-таки 6 миллионов записей, в память фиг влезет.Записи совсем коротенькие, могут и влезть. Можно, кстати, попробовать принудительно в память запихнуть - в MEMORY таблицу. Правда, у нее, имхо, расход памяти больше окажется. Или, по крайне мере, не меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 09:43:34 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
miksoftЗаписи совсем коротенькие INT(10) ZEROFILL - 10 байт на запись, 60 мегабайт всего. А дефолтно tmp_table_size=11M sort_buffer_size=256K ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 10:37:01 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaПоскольку внешний запрос всё равно "ниачём" - случайное значение поля, - разумнее подумать о предварительной фильтрации для получения только реально нужных данных. В подзапросе. Как это ни о чём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 18:08:11 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Очень просто. Подзапрос, возможно, даст тебе несколько разных id_n с одинаковым sostav. Как думаешь, какой из id_n будет в выходном наборе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 18:11:05 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
А, ну если в этом дело, то это по-барабану, главное от дубликатов избавиться, а какие остануться — не важно. Тут это даже и не закладывалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 20:28:02 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
Так если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 21:07:07 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaТак если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев. Слоны, они такие незаметные))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 09:12:08 |
|
||
|
Как оптимизировать запрос с псевдонимами
|
|||
|---|---|---|---|
|
#18+
AkinaТак если по барабану - нафига ты вообще это поле выводишь? делай тупо SELECT DISTINCT sostav без всяких там групбаев.А разве это что-то изменит, кроме экономии 4 байт на запись во временной таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 09:31:26 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1833920]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 369ms |

| 0 / 0 |
