Как я объясняю запрос с параметрами в MySQL

У меня есть запрос

SELECT foo FROM bar WHERE some_column = ?

Я могу получить объяснить план от MySQL, не заполняя значение для параметра?

8
задан Michael Barker 17 June 2010 в 17:40
поделиться

3 ответа

Пока вы выполняете только равные (а не подобные, которые могут повлиять на короткое замыкание), просто замените его значением:

EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';

Поскольку на самом деле он не выполняет запрос, результаты не должны отличаться от фактических. В некоторых случаях это не так (я уже упоминал LIKE). Вот пример различных случаев LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Param 1 == Foo - Можно использовать сканирование индекса, если индекс существует.
  2. Param 1 == % Foo - Требуется полное сканирование таблицы, даже если индекс существует
  3. Param 1 == Foo% - Может использовать сканирование индекса, в зависимости от от мощности индекса и других факторов

Если вы присоединяетесь, и предложение where приводит к невозможной комбинации (и, следовательно, происходит короткое замыкание). Например:

SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?

Если первый и второй параметры совпадают, у него один план выполнения, а если они разные, он выполнит короткое замыкание (и вернет 0 строк, не затрагивая никаких данных) ...

Есть другие, но это все, о чем я могу сейчас подумать ...

7
ответ дан 5 December 2019 в 20:13
поделиться

Не думаю, что это возможно. WHERE some_column = 'value' , WHERE some_column = other_column и WHERE some_column = (ВЫБРАТЬ .. ИЗ a JOIN b JOIN c ... WHERE ... ORDER BY. .. LIMIT 1) возвращает разные планы выполнения.

0
ответ дан 5 December 2019 в 20:13
поделиться

План объяснения может быть разным в зависимости от того, что вы вводите. Я думаю, что объяснительные планы без реального параметра ничего не значат.

1
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: