Я запускаю следующий SQL-запрос в MySQL 8.0: < /p>
SELECT mp.id
FROM meme_post mp
JOIN meme_post_tag mpt ON mp.id = mpt.meme_post_id
WHERE deleted_at IS NULL AND mp.media_type = 'STATIC' AND mpt.tag_id IN (11, 30, 24) -- Selected tag IDs
GROUP BY mp.id
HAVING COUNT(DISTINCT mpt.tag_id) = 3
ORDER BY mp.created_at DESC
LIMIT 21 OFFSET 0;
< /code>
Объяснение вывода: < /p>
1 SIMPLE mp ref PRIMARY,FK_meme_post_user,idx_deleted_at_created_at idx_deleted_at_created_at 9 const 166682 50.00 Using index condition; Using where; Using temporary; Using filesort
1 SIMPLE mpt ref idx_meme_post_tag_post_tag,FK_meme_post_tag_tag,FK_meme_post_tag_post_id idx_meme_post_tag_post_tag 8 findmymeme_db.mp.id 2 75.35 Using where; Using index
< /code>
и сведения о плане выполнения: < /p>
-> Limit: 21 row(s) (actual time=1571..1571 rows=21 loops=1)
-> Sort: mp.created_at DESC (actual time=1571..1571 rows=21 loops=1)
-> Filter: (`count(distinct mpt.tag_id)` = 3) (actual time=802..1566 rows=8238 loops=1)
-> Stream results (cost=182898 rows=333364) (actual time=802..1556 rows=219023 loops=1)
-> Group aggregate: count(distinct mpt.tag_id) (cost=182898 rows=333364) (actual time=802..1411 rows=219023 loops=1)
-> Nested loop inner join (cost=145301 rows=375967) (actual time=802..1343 rows=322453 loops=1)
-> Sort: mp.id (cost=11577 rows=166682) (actual time=802..832 rows=249318 loops=1)
-> Filter: (mp.media_type = 'STATIC') (cost=11577 rows=166682) (actual time=0.206..642 rows=249318 loops=1)
-> Index lookup on mp using idx_deleted_at_created_at (deleted_at=NULL), with index condition: (mp.deleted_at IS NULL) (cost=11577 rows=166682) (actual time=0.204..615 rows=332220 loops=1)
-> Filter: (mpt.tag_id IN (11,30,24)) (cost=1.01 rows=2.26) (actual time=0.0015..0.00191 rows=1.29 loops=249318)
-> Covering index lookup on mpt using idx_meme_post_tag_post_tag (meme_post_id=mp.id) (cost=1.01 rows=2.99) (actual time=0.00129..0.00169 rows=3 loops=249318)
< /code>
Дополнительная информация:
index idx_meme_post_tag_post_tag уникальна (meme_post_id, Tag_id).
Мой вопрос:
Я заметил, что mysql сортируется по mp. идентификатор. Однако, начиная с MySQL 8.0, группа больше не косвенно сортирует результаты. Тогда почему MySQL все еще сортируется? Таблица MPT индексируется и хранится в порядке MEME_POST_ID, и, поскольку мы выполняем соединение с MP, MySQL Sorts MP.ID для оптимизации вложенного соединения цикла. < /P>
Это правильно? MySQL выбирает сортировку mp.id явно для повышения эффективности вложенного соединения цикла?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... ution-plan
Почему MySQL сортируется по mp.id в этом плане выполнения запроса? ⇐ MySql
Форум по Mysql
-
Anonymous
1738317826
Anonymous
Я запускаю следующий SQL-запрос в MySQL 8.0: < /p>
SELECT mp.id
FROM meme_post mp
JOIN meme_post_tag mpt ON mp.id = mpt.meme_post_id
WHERE deleted_at IS NULL AND mp.media_type = 'STATIC' AND mpt.tag_id IN (11, 30, 24) -- Selected tag IDs
GROUP BY mp.id
HAVING COUNT(DISTINCT mpt.tag_id) = 3
ORDER BY mp.created_at DESC
LIMIT 21 OFFSET 0;
< /code>
Объяснение вывода: < /p>
1 SIMPLE mp ref PRIMARY,FK_meme_post_user,idx_deleted_at_created_at idx_deleted_at_created_at 9 const 166682 50.00 Using index condition; Using where; Using temporary; Using filesort
1 SIMPLE mpt ref idx_meme_post_tag_post_tag,FK_meme_post_tag_tag,FK_meme_post_tag_post_id idx_meme_post_tag_post_tag 8 findmymeme_db.mp.id 2 75.35 Using where; Using index
< /code>
и сведения о плане выполнения: < /p>
-> Limit: 21 row(s) (actual time=1571..1571 rows=21 loops=1)
-> Sort: mp.created_at DESC (actual time=1571..1571 rows=21 loops=1)
-> Filter: (`count(distinct mpt.tag_id)` = 3) (actual time=802..1566 rows=8238 loops=1)
-> Stream results (cost=182898 rows=333364) (actual time=802..1556 rows=219023 loops=1)
-> Group aggregate: count(distinct mpt.tag_id) (cost=182898 rows=333364) (actual time=802..1411 rows=219023 loops=1)
-> Nested loop inner join (cost=145301 rows=375967) (actual time=802..1343 rows=322453 loops=1)
-> Sort: mp.id (cost=11577 rows=166682) (actual time=802..832 rows=249318 loops=1)
-> Filter: (mp.media_type = 'STATIC') (cost=11577 rows=166682) (actual time=0.206..642 rows=249318 loops=1)
-> Index lookup on mp using idx_deleted_at_created_at (deleted_at=NULL), with index condition: (mp.deleted_at IS NULL) (cost=11577 rows=166682) (actual time=0.204..615 rows=332220 loops=1)
-> Filter: (mpt.tag_id IN (11,30,24)) (cost=1.01 rows=2.26) (actual time=0.0015..0.00191 rows=1.29 loops=249318)
-> Covering index lookup on mpt using idx_meme_post_tag_post_tag (meme_post_id=mp.id) (cost=1.01 rows=2.99) (actual time=0.00129..0.00169 rows=3 loops=249318)
< /code>
Дополнительная информация:
index idx_meme_post_tag_post_tag уникальна (meme_post_id, Tag_id).
Мой вопрос:
Я заметил, что mysql сортируется по mp. идентификатор. Однако, начиная с MySQL 8.0, группа больше не косвенно сортирует результаты. Тогда почему MySQL все еще сортируется? Таблица MPT индексируется и хранится в порядке MEME_POST_ID, и, поскольку мы выполняем соединение с MP, MySQL Sorts MP.ID для оптимизации вложенного соединения цикла. < /P>
Это правильно? MySQL выбирает сортировку mp.id явно для повышения эффективности вложенного соединения цикла?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79402267/why-is-mysql-sorting-by-mp-id-in-this-query-execution-plan[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия