|
|
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Есть небольшая табличка примерно 2кк записей. Делаю запрос следующего формата: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. где количество значений в операторе IN достаточно велико (например, в условии с `marketplace_id` = 10 их более 9к). Результирующая выборка не содержит данные, которые соответствуют условию запроса. Как показал explain, при выполнении запроса используется составной индекс по полям `asin` и `marketplace_id`. Переписал запрос на такой: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. При выполнении этого запроса возвращаются все данные. В итоге получается, что есть 2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса, которые на одинаковых данных возвращают разные результаты. Из-за "толстого" оператора IN запрос достаточно тяжелый, но он не превышает лимит заданный в конфиге max_allowed_packet. Об ограничениях на количество значений в операторе IN в доках не пишут. Удалось воспроизвести такое поведение на версиях: 5.6.35-log, 5.6.33-log, 5.6.39-83.1. Тут https://drive.google.com/open?id=11YK9vmLylDRxrMvec-3f3SgI3kq0dR_0 можно скачать дамп БД (одна таблица) и полные версии запросов с комментариями. Что делал. Менял порядок шествия значений в операторах IN - набор отсутствующих строк не менялся. Если менять местами группы условий, разделенные оператором OR - результаты меняются. На это можно посмотреть если поменять местами (`marketplace_id` = 3 AND `asin` IN ('value',.....)) и (`marketplace_id` = 2 AND `asin` IN ('value',.....)) в примере запроса в файле. Уменьшал количество значений в операторах IN - запрос возвращал правильный результат. Помогите, плиз, понять в чем проблема и куда копать, чтобы не напороться на поведение как в первом запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2018, 22:31 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDy, покажите полный DDL таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2018, 23:40 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
miksoftDmitriy-CoDy, покажите полный DDL таблицы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 05:31 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDyгде количество значений в операторе IN достаточно великоВсе значения в IN являются строковыми литералами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 07:38 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDy Код: sql 1. Код: sql 1. К теме не относится, но обратите внимание, что более половины диапазона значений вы уже использовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 07:40 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
miksoftDmitriy-CoDyгде количество значений в операторе IN достаточно великоВсе значения в IN являются строковыми литералами? Все значения в операторе IN закавычены. Пример значений: '0001374354','B003G53VSO'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 10:22 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDyВ итоге получается, что есть 2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса, которые на одинаковых данных возвращают разные результаты. Валидны и эквивалентны они только с ваших слов. Из примера не следует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 10:37 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
paverDmitriy-CoDyВ итоге получается, что есть 2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса, которые на одинаковых данных возвращают разные результаты. Валидны и эквивалентны они только с ваших слов. Из примера не следует Почему? Где я ошибаюсь? Исходя из скрипта ниже, они все-таки эквивалентны и валидны. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 11:09 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
А теперь для показанных двух запросов покажите запись таблицы, которая получается одним из них и не получается другим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 11:15 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDyвозвращают разные результаты. Игде? Осталось проанализировать результаты. Выявить те данные, что не попали в первую выборку. Отсюда плясать. Может опечатка, лишний пробел или что еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 11:19 |
|
||
|
2 ВАЛИДНЫХ, ЭКВИВАЛЕНТНЫХ запроса возвращают разные результаты. Выборка из одной таблицы.
|
|||
|---|---|---|---|
|
#18+
Dmitriy-CoDy...... Удалось воспроизвести такое поведение на версиях: 5.6.35-log, 5.6.33-log, 5.6.39-83.1. Тут https://drive.google.com/open?id=11YK9vmLylDRxrMvec-3f3SgI3kq0dR_0 можно скачать дамп БД (одна таблица) и полные версии запросов с комментариями. ...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2018, 13:02 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1829436]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 347ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...