|
|
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Таблица POLIS на 40 млн записей, в ней есть поле Код: sql 1. по которому построен индекс Код: sql 1. его статистика 0,0000005307737 Но простой запрос этот индекс не берет: Код: sql 1. 2. 3. Что тут не так? Другое поле в этой же таблице с таким же индексом и статистикой 0,0000012724427, по нему ищет практически мгновенно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:17:57 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Server Version: WI-V2.5.2.26540 Firebird 2.5 Server Implementation: Firebird/x86-64/Windows NT Service Version: 2 Работает как суперклассик. Но в суперсервере было то же самое.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:20:21 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
mvbНо простой запрос этот индекс не берет: Код: sql 1. 2. 3. Апострофы добавь к значению, которое ищешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:27:25 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
mvbНо простой запрос этот индекс не берет когда ищешь число в строковом поле, это неудивительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:30:36 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitr, я правильно понимать, что оптимизатор будет вот такое искать: Код: sql 1. - ? И если да, то... зачем ему делать cast к варчару поля, которое и так варчар ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:33:10 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Таблоид, я не понимаю твой вопрос. Оптимизатор всего навсего проверяет совместимость типов. Так что достаточно каста в правой части. Либо правильно задать искомый литерал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:36:39 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Таблоид, спасибо, думал сервер сам конвертит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:39:30 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоид, я не понимаю твой вопрос. Оптимизатор всего навсего проверяет совместимость типов. Так что достаточно каста в правой части. Либо правильно задать искомый литерал.Ну, вот забыли литерал задать правильно, и оптимизатор увидел несовместимость типов. К чему в итоге будет преобразован where-предикат: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 08:43:16 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
ТаблоидНу, вот забыли литерал задать правильно, и оптимизатор увидел несовместимость типов. К чему в итоге будет преобразован where-предикат: Код: plaintext Насколько я помню если одно из полей Numeric то будет преобразовывать к Numeric Между Varchar и Date отдаст предпочтение Varchar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:00:10 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Таблоид я правильно понимать, что оптимизатор будет вот такое искать: Код: sql 1. - ? И если да, то... зачем ему делать cast к варчару поля, которое и так варчар ? Он будет искать Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:02:38 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
m7mНасколько я помню если одно из полей Numeric то будет преобразовывать к Numeric Между Varchar и Date отдаст предпочтение Varcharа, понятно: он вместо преобразования ключа к варчару стал преобразовывать поле к числу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:03:09 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
тьфу, не успел я со своей "догадкой века" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:03:41 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
феерия какая-то началась, ей богу... ТаблоидНу, вот забыли литерал задать правильно, и оптимизатор увидел несовместимость типов. К чему в итоге будет преобразован where-предикат нафига его вообще преобразовывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:39:25 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Забавный у вас топик. :) P.S. Если ты помнишь, я как-то предлагал сделать общую таблицу приведений типов и вывесить её (тут или на ibase, неважно), чтобы не приходилось объяснять каждый раз, а просто ткнуть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:53:44 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
А сравнивать числа со строками - это полезно? Т.е. это полезная фича движка? Или это больше пространство для ошибок, типа описанной в первом посте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 11:37:45 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitrфеерия какая-то началась, ей богу...ТаблоидНу, вот забыли литерал задать правильно, и оптимизатор увидел несовместимость типов. К чему в итоге будет преобразован where-предикатнафига его вообще преобразовывать?В данном примере тип литерала не соотв-вует типу поля, и это послужило причиной смена плана на натурал. Мой вопрос на самом деле такой: почему движок начинает искать по условию where cast( field as <literal_type) = <literal>, а не так: where field = cast(literal as <field_type>) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:06:57 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Таблоид, потому что сравнить число со строкой можно исключительно преобразованием строки к числу, а не наоборот. Причину я тут уже неоднократно объяснял. Так и в оракле, и в других СУБД тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:12:40 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitr> сравнить число со строкой можно исключительно dimitr> преобразованием строки к числу, а не наоборот Вообще-то это не совсем так или даже совсем не так, и ты это прекрасно знаешь. Как делается в других СУБД, как прописано в стандарте и пр. - другой вопрос, но в очевидном случае с integer-ом можно было бы и добавить дополнительное условие, если бы сам сабжевый случай не был идиотским, конечно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:27:54 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВообще-то это не совсем так или даже совсем не так, и ты это прекрасно знаешь я знаю, что сравнить можно неправильно, а можно правильно. Строковых представлений одного и того же числа множество, поэтому преобразовывать в строку при сравнении неправильно. Тоже самое с датой/временем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:33:20 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitr> Строковых представлений одного и того же числа множество dimitr> Тоже самое с датой/временем. Мы говорим сугубо про integer, так что дату и время сюда притягивать не нужно. А у integer-а строковых представлений ровно одно нормальное и распространённое - экзотику типа ведущего нуля, знака и 1,e+10 обсуждать смысла не вижу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:36:55 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, про экзотику в виде знака это ты математикам расскажи :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:38:02 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
даже если экзотику не рассматривать, я затрудняюсь объяснить, почему из 1 = '1' и 1.0 = '1.0' и 1 = 1.0 не должно следовать равенство 1 = '1.0' или 1.0 = '1' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 12:41:42 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitr> про экзотику в виде знака это ты математикам расскажи :-) Знак я имел в виду плюс, а не минус. С минусом понятно. А несогласных математиков зови сюда, объясним популярно, сами тоже не гуманитарии. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 14:02:35 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
dimitr> почему из 1 = '1' и 1.0 = '1.0' и 1 = 1.0 не должно dimitr> следовать равенство 1 = '1.0' или 1.0 = '1' Во-первых, потому что 1ю0 - это нифига не integer (внезапно ), во-вторых, не знаю, зачем ты тут такие "сложные" уравнения выводишь, когда речь идёт об одном, а не двух-трёх, в-третьих, про 1.0 = 1.0 - это хорошо, это пять. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 14:05:29 |
|
||
|
Запрос не использует индекс
|
|||
|---|---|---|---|
|
#18+
В-четвёртых, одно (и самое главное) спасает - на самом деле, мы тут проблему из пальца высасываем, ибо знаючи полагаться на неявное приведение, особенно как в сабжевом примере, будут только аристократы и эти самые. Так что забей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 14:07:26 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38594156&tid=1563783]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
176ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 508ms |

| 0 / 0 |
