|
|
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, для поиска всех записей в БД по полю "NAME", где присутствует подстрока 'михаил' использую запрос: Код: plsql 1. Вопрос: какая есть альтернатива like, запрос с которым при больших таблицах будет медленным? Использовать регулярные выражения? Например так тоже работает: Код: plsql 1. Вопрос только, что быстрее и надежнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 00:45:36 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, обычные индексы не используются, если нужно искать по подстроке внутри строки или по регекспу. быстрее должно быть когда используется специальный индекс по триграммам из расширения pg_trgm . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 01:14:19 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
есть gist индекс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 14:24:51 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Спасибо, создал индекс Код: plsql 1. Проверил на производительность 3 варианта поиска: 1. Код: plsql 1. план выполнения: Код: plsql 1. 2. 3. 4. 5. 6. 7. 2. Код: plsql 1. план выполнения: Код: plsql 1. 2. 3. 4. 5. 3. Код: plsql 1. план выполнения: Код: plsql 1. 2. 3. 4. 5. Видно, что 3-й способ не на много медленнее, чем через gist индекс. Запрос с LIKE, как и ожидалось, значительно медленнее. Но это еще пока данных в БД мало. При больших данных разница во времени скорей всего почувствуется еще сильней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 23:22:27 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, уберите сортировку в первом варианте: в других ее нет, а тут на нее уходит большая часть времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 00:50:50 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, тестируйте на гораздо большем объеме данных. на ваших ста строках разница почти не видна. вот если не в два раза, а на порядки, это сразу будет заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 01:48:18 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, время всех трёх запросов меньше одной миллисекунды, это даже в сумме меньше чем квант времени в мультизадачной операционной системе, такой например как windows. Ваша ОС квант времени пропустит и время запроса в десять раз прыгнет, какой смысл тестировать на таком малом количестве данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 01:49:12 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Гость_0Viacheslav_mihalich, время всех трёх запросов меньше одной миллисекунды, это даже в сумме меньше чем квант времени в мультизадачной операционной системе, такой например как windows . Ваша ОС квант времени пропустит и время запроса в десять раз прыгнет, какой смысл тестировать на таком малом количестве данных?плин, зря итаниумы заморозили .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 02:30:46 |
|
||
|
поиск в базе по подстроке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalichСпасибо, Видно, что 3-й способ не на много медленнее, чем через gist индекс. Запрос с LIKE, как и ожидалось, значительно медленнее. Но это еще пока данных в БД мало. При больших данных разница во времени скорей всего почувствуется еще сильней. видно что 2-й и 3-й способы одинаковые, фул скан с фильтром. 1-й юзает индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 09:45:07 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38691270&tid=1998592]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 511ms |

| 0 / 0 |
