зависимый подзапрос обработан, несмотря на то, что Extra Impossible ГДЕ заметил после чтения констант - PullRequest
0 голосов
/ 25 апреля 2020

в этом запросе https://www.db-fiddle.com/f/snzSLd8y1oRNRqdsFpNdHa/0

SELECT test0.id,
(SELECT GROUP_CONCAT(test2.one_info) FROM test2 WHERE test2.one_id = test1.id) AS GC
FROM test0
INNER JOIN test1 ON test1.zero_id = test0.id
WHERE test0.id = 1 AND test1.id = 1 AND test1.rand = 5;

test1.rand=5 существует, поэтому план выполнения равен

| id  | select_type        | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra       |
| --- | ------------------ | ----- | ---------- | ----- | ------------- | ------- | ------- | ----- | ---- | -------- | ----------- |
| 1   | PRIMARY            | test0 |            | const | PRIMARY       | PRIMARY | 4       | const | 1    | 100      | Using index |
| 1   | PRIMARY            | test1 |            | const | PRIMARY       | PRIMARY | 4       | const | 1    | 100      |             |
| 2   | DEPENDENT SUBQUERY | test2 |            | ref   | IND           | IND     | 5       | const | 4    | 100      | Using index |

, но когда я изменяю его на что-то, что не существует, как test1.rand=10, он дает этот план возбуждения

| id  | select_type        | table | partitions | type | possible_keys | key | key_len | ref   | rows | filtered | Extra                                               |
| --- | ------------------ | ----- | ---------- | ---- | ------------- | --- | ------- | ----- | ---- | -------- | --------------------------------------------------- |
| 1   | PRIMARY            |       |            |      |               |     |         |       |      |          | Impossible WHERE noticed after reading const tables |
| 2   | DEPENDENT SUBQUERY | test2 |            | ref  | IND           | IND | 5       | const | 4    | 100      | Using index                                         |

и, несмотря на Extra: Impossible WHERE noticed after reading const tables и не возвращает результатов, он все еще использовал select_type: DEPENDANT SUBQUERY и получил rows: 4

как исправить эту проблему и заставить ее вообще ничего не возвращать на Extra: Impossible WHERE noticed after reading const tables для сохранения производительности?


я пробовал подобрать подзапрос, подобный этому

SELECT test0.id, GC.GC
FROM test0
INNER JOIN test1 ON test1.zero_id = test0.id
INNER JOIN (SELECT GROUP_CONCAT(test2.one_info) AS GC FROM test2 WHERE test2.one_id = 1) AS GC
WHERE test0.id = 1 AND test1.id = 1 AND test1.rand = 10;

, но сделал ту же проблему

| id  | select_type | table | partitions | type | possible_keys | key | key_len | ref   | rows | filtered | Extra                                               |
| --- | ----------- | ----- | ---------- | ---- | ------------- | --- | ------- | ----- | ---- | -------- | --------------------------------------------------- |
| 1   | PRIMARY     |       |            |      |               |     |         |       |      |          | Impossible WHERE noticed after reading const tables |
| 2   | DERIVED     | test2 |            | ref  | IND           | IND | 5       | const | 4    | 100      | Using index                                         |
...