|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Очень неконкретный отчёт. https://stackoverflow.com/questions/56858452/why-did-my-where-clause-affect-my-left-join Якобы, сравниваются два запроса на одной БД. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Якобы, в обоих случаях находится одна и та же строка мастер-таблицы (с кодом 'ABC'). Но при этом из вторoй таблицы строка подтягивается только во втором случае, а в первом - NULL. Кто-нибудь сталкивался с чем-то таким ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 12:09 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
03.07.2019 12:09, Arioch пишет: > Кто-нибудь сталкивался с чем-то таким ? только читал про такие симптомы. это грибы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 12:13 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Arioch, Ты бы хоть поглядел, что именно оно якобы возвращает. Если в первом случае LEFT JOIN не отобрал, то как у него вернулось значение в PRODUCTS.code? Короче, мы такое не курим. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 12:19 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
я глядел, и даже вопрос про это в комментах оставил а вот ты, стало быть, не глядел пример он явно "из головы" делал, а не из реальной БД с реальными чужими данными ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:22 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Там разные коллейты в сравниваемых полях. На это никто не обратил внимание. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:27 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
hvlad, это предполагается, но точно не названо в любом случае, это ведь не должно менять результат ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:40 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Т.к. пациент явно путается в показаниях и пишет не то что видит - это важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:55 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
ОК, воспроизвожу на коленке на FB 2.1 (что под руками было) Код: 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.
Как-то это ненормально.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:20 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
В общем видe: Kакие charset/collate используются для вычисления "T_CS.id = T_CI.id" ? Те же самые по идее надо использовать, если решили - ** на основе именно этого условия ** - спускать LIKE на уровень ниже ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:24 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Arioch, прекратите использовать дурацкие * для начала. Не хрена ж не понятно какие поля и в каком порядке выводятся. и результат в таком виде не фига не понятный Arioch-- OK: data ~ data что нельзя написать какие именно значения выводятся? автор-- ????? data ~ NULL ????? если оба поля из T_CS равны NULL, то как раз всё нормально, а вот если как у автора на stackoverflow, то нет ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:29 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Вам скрипт в зубы дали, готовый, запустите и форматируйте как вам удобно. Какие данные выводятся вполне понятно - в каждой таблицы одна единственная строчка. Она либо выводится, либо нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:31 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
> если оба поля из T_CS равны NULL, то как раз всё нормально это НЕ нормально, потому что необъяснимо с точки зрения SQL на T_CS там условие одно единственное и на этих данных оно выполняется ВСЕГДА, независимо от коллейтов что оптимизатор крышей поехал, такая реализация - да, *так* объяснимо ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:33 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Arioch, ну вообще-то там конечно есть недостаток в том, что предикат фильтрации может проталкиваться далее через условия сравнения. Но в большинстве случаев это несёт пользу. А вот как можно додумался условие связи делать по текстовым полям с разными COLLATE вот это вопрос к проектировщику. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:44 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
03.07.2019 14:20, Arioch пишет: > что primary key надо вставлять МЕЖДУ charset и collate - это интересно кто так догадался? создатели стандарта SQL. (на заре компьютерной эпохи) вообще-то, так не надо делать. по хорошему, для PK нужно декларировать CONSTRAINT. Код: sql 1. 2. 3. 4.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:45 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Выше план не читать, он от другого запросу. От проблемного ожидаемое Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:46 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Ну и ещё ожидаемое, если всё-таки подключить индекс по мастер-таблице, а не по подчинённой, то снова работает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:50 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Ariochа вот ты, стало быть, не гляделЯ все комменты не читаю. Много воды, мусора и вот этого. AriochВыше план не читать ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:52 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
насколько я понимаю, из (T_CS.id = T_CI.id) и (T_CI.id like '%bc%') оптимизатор вывел еще и (T_CS.id like '%bc%'), которое есс-но вычисляется как false внутри условия джойна, возвращая NULL для правой части. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:53 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Симонов Денис, Это несёт пользу, но если делать правильно.... А почему нельзя? а связки по полям разного числового типа можно делать или тоже запрещено? bigint и smallint например можно сравнивать в JOIN'e ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:54 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
dimitr, ну это единственное объяснение.... т.е. оптимизатор догадался пропихнуть вниз LIKE но не догадался пропихнуть связанный с этим условиенм charset&collate плюс наложился натуральный скан мастер-таблицы ввиду поиска не с начала строки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:56 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
просто для добавления новых предикатов по принципу эквивалентности, недостаточно брать за основу любое равенство. Надо еще убедиться, что коллейты по обе стороны совпадают. Вот тогда можно оптимизировать как сейчас. А иначе нефиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 15:01 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
dimitr, на мой взгляд нужно проталкивать вместе с коллейтом когда ты сравниваешь signed int 32 и unsigned int 32 ты оба расширяешь до int 64, например с чарсетами и коллейтами должно происходить аналогичное приведение к некоему общему надмножеству и оно должно использоваться не только для самого сравнения, но и для всех вторичных, порождённых этим сравнением действий Но это "идеалистическoе" рассуждение, 21919886 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 15:04 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Можно ещё такие конструкции вспомнить www.destructor.de/firebird/charsets.htmYou can also specify the collation with the ORDER BY clause: ORDER BY LASTNAME COLLATE FR_CA, FIRSTNAME COLLATE FR_CA or with the WHERE clause: WHERE LASTNAME COLLATE FR_CA = :lastnametosearch or when searching: WHERE UPPER (LAST_NAME COLLATE SV_SV) = 'PAULSEN'; > для добавления новых предикатов т.е. фактически это разные предикаты есть предикат (T_CS.id collate UNICODE like '%bc%') а есть другой предикат (T_CS.id collate UNICODE_CI like '%bc%') и добавляется неверный предикат.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 15:15 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Ariochкогда ты сравниваешь signed int 32 и unsigned int 32 ты оба расширяешь до int 64, например с чарсетами и коллейтами должно происходить аналогичное приведение к некоему общему надмножествуС чего это вдруг вы решили, что такое "общее надмножество" существует? Болгарскую кодировку хоть раз видели? А ведь это тоже кирилица. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 15:19 |
|
FB3, join vs LIKE vs case-sensitivity
|
|||
---|---|---|---|
#18+
Ariochесть предикат (T_CS.id collate UNICODE like '%bc%') а есть другой предикат (T_CS.id collate UNICODE_CI like '%bc%') Бинго! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 15:22 |
|
|
start [/forum/topic.php?fid=40&fpage=22&tid=1560670]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 195ms |
0 / 0 |