|
|
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hi all DDL: Код: plaintext 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. Статистика по запросам сабжа: Код: plaintext 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. 60. 61. 62. Однако, характер данных таков, что like '%qwertyuiop%' и NOT like '%qwertyuiop%' должны вроде как работать одинаково: первый должен игнорировать (не рассматривать вообще) 9 млн строк, т.к. длина шаблона превышает фактическое число символов в поле ( а оно ведь известно ? ); второй же должен сразу учитывать их (опять-таки без анализа содержимого) - по той же причине. Что тогда еще влияет ? ЗЫ. Запрос без всяких условий: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 20:31:48 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Ты, как обычно, чепуху всякую навыдумываешь. Во-первых, я не уверен, что такая оптимизация вообще есть (и думаю, что её нет). Во-вторых, она возможна только для литералов, но невозможна для параметров. Тебя конкретно эта "оптимизация" интересует (тогда нужно про неё и спрашивать) или разница в технике операторов LIKE и NOT LIKE ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:26:32 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВо-первых, я не уверен, что такая оптимизация вообще есть (и думаю, что её нет).Да как это ?! ну очевидно же, что незачем анализировать строку, если её длина МЕНЬШЕ длины шаблона блин! Гаджимурадов РустамВо-вторых, она возможна только для литералов, но невозможна для параметров. Тебя конкретно эта "оптимизация" интересует (тогда нужно про неё и спрашивать) или разница в технике операторов LIKE и NOT LIKE ?А почему это для параметров невозможно ? Вот есть ХП, в неё прилетел какой-то там параметр - он же конкретное значение в рантайме будет иметь. Ну, и... чем отличается это от случая, когда явный литерал будет задан ? "План" выполнения тут не надо составлять, просто берём строки и сравниваем. Короче, интересует прежде всего вот что: 1) LIKE - он способен сразу откидывать строку без рассмотрения или нет ? 2) действительно ли LIKE останавливается и выдаёт результат при обнаружении совпадения с шаблоном ? или лезет дальше, до конца строки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:35:22 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Таблоидочевидно же, что незачем анализировать строку, если её длина МЕНЬШЕ длины шаблона блин!Та ты шо ? А сравни-ка мне Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:24:01 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидNOT like трудится дольше. И чем длиннее строка, тем сильнее различие.Тоже чепуха. Ты сравнил 2 числа, попал пальцем в ... никуда, и сделал из этого выводы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:26:29 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Да как это ?! ну очевидно же, что незачем анализировать Таблоид> строку, если её длина МЕНЬШЕ длины шаблона блин! Это от шаблона зависит. В случае s1 like %s2% и s2 заведомо больше s1 - да, но для этого надо саму s1 знать, а типы данных могут быть разные, плюс нуллы, плюс БЛОБы. Т.е. когда унутрях дойдёт до сравнения строк, то бишь s3 cmp s4 - побайтного сравнения не будет, конечно, но, думаю, это уже *TL-код, а не FB. > 1) LIKE - он способен сразу откидывать строку без рассмотрения или нет ? > 2) действительно ли LIKE останавливается и выдаёт результат при обнаружении > совпадения с шаблоном ? или лезет дальше, до конца строки ? 1. Теоретически - способен в некоторых случаях. 2. Лично я вопрос не понял. Никто не останавливается, like - это boolen-предикат, который работает так же, как и все остальные boolean-предикаты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:31:00 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hvladТа ты шо ? А сравни-ка мне Код: sql 1. думаю, вопрос не настолько примитивен был)) искомая строка из лайка, по идее, должна преобразоваться парсером в конечный автомат - набор вызовов StartsText, ContainsText, EndsText, объединенных логическим умножением. если при проверке хотя бы одной из функции вышло False - нет смысла проходить все последующие ступени. если перед выполнением очередной функции оставшаяся длина тестируемой строки меньше, чем длина искомой подстроки (и кодировка не содержит непотребностей в виде суррогатных пар) - нет смысла проходить и текущую ступень. ну а уж чтобы сканить строку до конца, когда автомат отработал и вернул True - тут я не знаю, как надо "постараться")) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:12:04 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
интересен вопрос: если поиск идет в блобе, который занимает несколько страниц, и шаблон находится в первых страницах - блоб все равно будет считан полностью или только до первого вхождения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:15:18 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
fd00ch> блоб все равно будет считан полностью ... ? Да, AFAIK. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:26:52 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
fd00chдумаю, вопрос не настолько примитивен былА я вот - не думаю. Я читаю вопрос и на него отвечаю. fd00chискомая строка из лайка, по идее, должна преобразоваться парсером в конечный автоматRTFM: Knuth-Morris-Pratt algorithm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:50:16 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
fd00chинтересен вопрос: если поиск идет в блобе, который занимает несколько страниц, и шаблон находится в первых страницах - блоб все равно будет считан полностью или только до первого вхождения?Если шаблон полностью исчерпан, то поиск останавливается. Блоб дочитываться не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:51:08 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hvladА сравни-ка мне Код: sql 1. Ах, вот ты как... :-) Тогда уточню правило: если хотя бы одно из "слов" шаблона имеет char_length() больше, чем длина фактически хранимых в поле символов, то сопоставлять бестолку. Под "словами" понимаю лексемы, разделённые метасимволами `%` и `_`. Контрпример будет ? PS. Пока что есть смутное сомнение, что LIKE не учитывает макс. длину слова внутри шаблонов. 1. buf = 256 Код: plaintext 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. 2. buf = 65000 (#FileSystemCacheThreshold = 65536) Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:10:49 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hvladТаблоидNOT like трудится дольше. И чем длиннее строка, тем сильнее различие.Тоже чепуха. Ты сравнил 2 числа, попал пальцем в ... никуда, и сделал из этого выводыОга Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:13:50 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидПока что есть смутное сомнение, что LIKE не учитывает макс. длину слова внутри шаблонов. Естественно не учитывает, поскольку поиск по длинному шаблону в коротких данных смысла не имеет. А те мизерные доли процента пользователей, которые маются такой фигнёй, рояля не играют. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:16:46 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЭто от шаблона зависит. В случае s1 like %s2% и s2 заведомо больше s1 - да, но для этого надо саму s1 знать, а типы данных могут быть разные, плюс нуллы, плюс БЛОБы. Т.е. когда унутрях дойдёт до сравнения строк , то бишь s3 cmp s4 - побайтного сравнения не будет, конечно, но, думаю, это уже *TL-код, а не FB.Не, погодь! я как раз и говорю: существуют случаи, когда сравнивать НЕ НУЖНО. Если известно, конечно же, фактическое число символов, хранимое в строке (см выше, однократно - перед началом подсчета - определяется число символов в самом длинном "слове" в шаблоне). Про варчары и блобы - отчётливо помню, что тут говорилось: ФБ *знает* число символов в таких полях. Про то, что такое-то поле содержит нулл - тем более знает. Гаджимурадов Рустам> 2) действительно ли LIKE останавливается и выдаёт результат при обнаружении > совпадения с шаблоном ? или лезет дальше, до конца строки ? 2. Лично я вопрос не понял. Никто не останавливается, like - это boolen-предикат, который работает так же, как и все остальные boolean-предикаты.я не про пробегание "вниз по строкам" , это понятно всё. Я про работу алгоритма самого LIKE: вот он движется вдоль строки , находит первое соотв-вие - и дальше остановиться должен, выдав для этой строки TRUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:20:17 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Таблоид, давай ты сначала научишься учитывать все факторы , а потом я буду смотреть на твои примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:22:03 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТаблоидПока что есть смутное сомнение, что LIKE не учитывает макс. длину слова внутри шаблонов. Естественно не учитывает, поскольку поиск по длинному шаблону в коротких данных смысла не имеет. А те мизерные доли процента пользователей, которые маются такой фигнёй, рояля не играют.Они (данные) не во всех записях такие короткие! У мну поле в этом примере = варчар(20), а могло бы быть и варчар(2000). Посмотри в первый пост: там всё начинается с `q`, а заканчивается `qwertyuiop`. Или возьми справочник контрагентов, когда в нём и физлица и юрики. Какой смысл сопоставлять шаблон "%АДМИНИСТРАЦ%ЯРОСЛАВСК%ПРЕДСТАВ%" с челами типа "ПЕТРОВ" или "КУЗНЕЦОВ" (а таких там - прорва!) ? Мысль понятна, надеюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:24:15 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hvladдавай ты сначала научишься учитывать все факторы , а потом я буду смотреть на твои примеры.Какие "все факторы" не учтены сейчас ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 01:25:50 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Таблоидhvladдавай ты сначала научишься учитывать все факторы , а потом я буду смотреть на твои примеры.Какие "все факторы" не учтены сейчас ?Твоя версия ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 02:04:02 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> PS. Пока что есть смутное сомнение, что LIKE Таблоид> не учитывает макс. длину слова внутри шаблонов Создавал ты топик с уверенностью, что учитывает. Таблоид> Я про работу алгоритма самого LIKE: вот он движется Таблоид> вдоль строки, находит первое соотв-вие - и дальше Таблоид> остановиться должен, выдав для этой строки TRUE. Ну так и делает (наверное - не проверял). Как и любой другой boolean-предикат. Таблоид> Они (данные) не во всех записях такие короткие! Таблоид> Какой смысл Начинается. Вроде бы, изначально речь шла о полях таблицы (по крайней мере, мне так показалось), а не о конкретных записях. А смысл... с практической т.з. смысла в том, что ты предлагаешь особого нет - ну да, оптимизация, да, в условном 1% случаев кому-то поможет (если такие как ты ещё есть). :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 02:04:44 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидКакой смысл сопоставлять шаблон...А что ты выигрываешь ? 1 сек на 10млн записей ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 02:05:18 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
hvladТаблоидпропущено...Какие "все факторы" не учтены сейчас ?Твоя версия ?А я первый тебя спросил :-) hvladА что ты выигрываешь ? 1 сек на 10млн записей ? В этом (тривиальном) варианте - да. А что будет при проверке более длинного шаблона и наличии аттачей-конкурентов - кто ж его знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 09:54:53 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам с практической т.з. смысла в том, что ты предлагаешь особого нет - ну да, оптимизация, да, в условном 1% случаев кому-то поможет (если такие как ты ещё есть). :)т.е. по шаблонам, состоящим из "слов" длиннее 10 символов, уже не ищут, что ле ? Экзотика ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 09:57:22 |
|
||
|
where s LIKE '%txt%' *vs* where s NOT like '%txt%': первое быстрее. Why ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидА я первый тебя спросил :-)Ну так первый и ответь. Если оно тебе надо. ТаблоидА что будет при проверке более длинного шаблона и наличии аттачей-конкурентов - кто ж его знает.Ну да, конкуренты мешают вычислять like. PS Займись уже чем-нить реально полезным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 12:23:52 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38513757&tid=1563981]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 514ms |

| 0 / 0 |
