В чем разница между INSTR и LIKE в Oracle? - PullRequest
5 голосов
/ 27 декабря 2011

Может кто-нибудь сказать мне разницу между INSTR и LIKE в Oracle?

Какой из них быстрее в Oracle10g?

Ответы [ 4 ]

8 голосов
/ 27 декабря 2011

Это зависит от данных и шаблона.Если вы используете like 'a%', то Oracle может использовать индексы BTree для поиска совпадений, потому что может искать btree с началом шаблона, а затем рассматривать только поддерево.

Это не работает дляLIKE '%a' но вы можете обойти это, создав вычисляемый столбец, который переворачивает все значения из столбца, который вы хотите найти (так вы получаете шаблон выше).

Если вы используете хешированные индексы, мало чтоOracle может делать, но сканировать весь индекс.Это может быть быстрее, когда есть только несколько различных значений.

Я не уверен, может ли INSTR когда-либо использовать индекс, потому что у него нет фиксированной привязки.

Так же, как со всемивопросы производительности:

  1. Заполните базу данных некоторыми реалистичными данными теста и запустите несколько тестов.
  2. Всегда пишите свой код так, чтобы его можно было легко оптимизировать позже, когда вы знаете об узких местах
  3. Никогда не догадайтесь, что может быть медленным.Вы будете ошибаться в 90% случаев.Всегда измеряйте.
3 голосов
/ 27 декабря 2011
  • INSTR выполняет поиск строки внутри другой строки с параметрами направления, начальных позиций и т. Д.
  • LIKE - это простое сопоставление с образцом и стандартный SQL

Ни один не будет «быстрее» последовательно, потому что они несопоставимы: это зависит от того, что вам нужно сделать, ваши данные, как вы ищете и т. Д.

2 голосов
/ 27 декабря 2011

INSTR - это функция оракула, поскольку Oracle 8i для поиска подстроки, а LIKE - это условие SQL, в основном используемое для сопоставления строки с подстановочными знаками.

Я ожидаю, что INSTR будет немного быстрее, поскольку он менее сложен, но я его не измерял.

1 голос
/ 11 июня 2015

На этой странице написано, что INSTR быстрее:

http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html

EDIT: Ссылка на архив, так как вышеперечисленное больше не доступно: http://web.archive.org/web/20160301212009/http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html

Также на SO для MySql этот ответ говорит, что INSTR быстрее.

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