Сравните числа без суффикса в sql - PullRequest
0 голосов
/ 17 ноября 2011

Идентификационные номера в моей базе данных имеют код, встроенный в последние 3 символа.При сравнении этих идентификаторов на равенство иногда допустимо игнорировать последние 3 символа.

Т.е. 12345001 == 12345009 должно быть истинным.

Обычно я делаю это с помощью следующего предложения where:

where floor(id1/1000) == floor(id2/1000)

, но в случае, когда я знаю, id1 хранится в«Базовая» форма, где последние 3 цифры равны нулю, также будет работать следующее:

where id1 == floor(id2/1000)*1000

Это также возможно при использовании подстроки.


Q: Кто-нибудь может мне сказать по опыту, какой из этих трех методов является наиболее эффективным, или порекомендовать лучший (наиболее точный) способ для профилирования этих трех различных запросов.

Спасибо.

1 Ответ

1 голос
/ 17 ноября 2011

Выполнение любого значения идентификатора через функцию предотвратит любое использование индекса, и простые математические операции над целыми числами будут быстрее, чем приведение к типу символа с последующим сравнением подстроки.

Если вы хотите полностью оптимизировать это, вы можете добавить вычисляемый столбец для получения floor(id/1000), затем индексировать его и использовать в предложении WHERE.

(Еще один пример для сравнения abs(id1-id2)<1000, но базовые серии математических преобразований, подобные этому, будут иметь временное значение только над огромными наборами данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...