Сравните равенство длин строк - PullRequest
1 голос
/ 18 июля 2011

Я хотел бы знать, какая из двух следующих операций в поле индексированного varchar более эффективна (они играют альтернативу в моем более сложном запросе):

length(field) == 5

или

field == "12345"

Сначала это выглядело очевидным для меня, что первый пункт, если быстрее.Но поскольку поле индексируется, сравнение происходит довольно быстро.Но как насчет длины?Я думаю, индекс не хранит информацию о длине строки ...

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Второе гораздо более эффективно в индексированном поле varchar.В частности, критерий ограничения (точное соответствие) является гораздо более ограничительным, чем ограничение длины;это большее ограничение ускоряет выбор.

0 голосов
/ 18 июля 2011

В любом случае сравнение длины лучше. Даже если эти строки хешируются и индексируются каким-либо образом, их сравнение не может быть быстрее простого целочисленного сравнения. Даже если длина не сохраняется (но я не верю в это), пустой цикл while(s[i] != '\0'); для вычисления длины будет быстрее, чем сравнение по типу char-by-char.

...