powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вариации запроса
6 сообщений из 6, страница 1 из 1
вариации запроса
    #40024800
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тоже поинтересуюсь .. (а то гложет меня сомнение)

Скажем есть такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT DISTINCT t1.f1, t2.date, t2.fz
FROM t2
INNER JOIN t1 ON t1.f1 = const AND t1.f2 = t2.f1 AND t1.fkey = t2.id
WHERE t2.id IN (
    SELECT t3.fkey FROM t3
    WHERE t3.f1 = const AND t3.f2 = const
  )
  AND t2.fx = const
  AND t2.fy = const
  AND t2.date <= "const"
;



То есть имеем подзапрос в IN() который легко разворачивается в JOIN и соответственно, всё оптимизатором предварительно преобразуется примрно к этому:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT DISTINCT t1.f1, t2.date, t2.fz FROM t2, t1, t3
WHERE 
  AND t2.fx = const
  AND t2.fy = const
  AND t2.date <= "const"

  AND t1.f1 = const
  AND t1.f2 = t2.f1
  AND t1.fkey = t2.id

  AND t3.f1 = const
  AND t3.f2 = const
  AND t3.fkey = t2.id
;



И по сути, оптимизировать такой запрос по скорости - только играться с перестановкой условий с учетом наличных индексов, в т.ч. составных (они там есть в достатке, подойдет много разных вариантов)

Или я это не верно представляю себе? Сервер Перкона последняя, движок соответственно xtraDB
Ну и ещё: выходной поле t1.f1 - в запросе фигуряет с условием константного типа .. можно же гарантировано вместо него выдавать эту константу .. ну или вообще опустит для экономии трафика .. :)
---------
Историки часто находят артефакты древней высокоразвитой Цивилизации со странными буквами - СССР
...
Рейтинг: 0 / 0
вариации запроса
    #40024865
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
подзапрос в IN() который легко разворачивается в JOIN
Вот не помню, умеет ли MySQL так делать.
А вот материализовать точно умеет.
...
Рейтинг: 0 / 0
вариации запроса
    #40024930
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Ну вот сидит в башке, где-то читал что планировщик запроса сначала его преобразует к базовому соединению, перемещая все условия в джойнах в часть "где,куда(почем)" .. в данном случае в IN() конкретно запрос, не зависящий от охватывающей части.
А вот может ли мускуль преобразовать IN() .. помнится 2011-12 ещё нет, но с тех пор, насколько помню над этим плотно работали, и несколько раз писалось за "улучшения" ..

вот и интересно, "до чего уже техника дошла"? :)

P.S. Explain на первый выдает 3 таблицы уровня ref и eq_ref, и никакой "промежуточной" не создает. Индексы пользует так, как будто бы он развернул IN() .. вот, поэтому и гложет сомнение .. уточнить бы.
...
Рейтинг: 0 / 0
вариации запроса
    #40024931
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто получается, если он так обучился уже, то смысл создавать хитрозакрученные запросы с целью надурить планировщик - уже больше просто нет.
...
Рейтинг: 0 / 0
вариации запроса
    #40024936
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Ну вот сидит в башке, где-то читал что планировщик запроса сначала его преобразует к базовому соединению, перемещая все условия в джойнах в часть "где,куда(почем)" .. в данном случае в IN() конкретно запрос, не зависящий от охватывающей части.
WHERE optimization Ну и вообще весь раздел. Но это не имеет никакого отношения к подзапросам - WHERE IN там рассматривается исключительно в разрезе списков.
...
Рейтинг: 0 / 0
вариации запроса
    #40024938
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
смысл создавать хитрозакрученные запросы с целью надурить планировщик - уже больше просто нет.
Их и раньше не было. У тебя имеется куча инструментов по управлению планировщиком - от straight_join и force/use/ignore index и до тюнинга связанных с построением плана настроек и констант.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вариации запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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