MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

ускоряване на търсенето на текст със заместващи знаци

Инструментът за планиране на заявки PostgreSQL е умен, но не е AI. За да го направите, използвайте индекс на израз използвайте точно същата форма на изразяване в заявката.

С индекс като този:

CREATE INDEX t_a_lower_idx ON t (lower(substring(a, 1, 4)));

Или по-просто в PostgreSQL 9.1:

CREATE INDEX t_a_lower_idx ON t (lower(left(a, 4)));

Използвайте тази заявка:

SELECT * FROM t WHERE lower(left(a, 4)) = 'abcd';

Което е 100% функционално еквивалентно на:

SELECT * FROM t WHERE lower(a) LIKE 'abcd%'

Или:

SELECT * FROM t WHERE a ILIKE 'abcd%'

Ноне :

SELECT * FROM t WHERE a LIKE 'abcd%'

Това е функционално различна заявка и имате нужда от разлица индекс:

CREATE INDEX t_a_idx ON t (substring(a, 1, 4));

Или по-просто с PostgreSQL 9.1:

CREATE INDEX t_a_idx ON t (left(a, 4));

И използвайте тази заявка:

SELECT * FROM t WHERE left(a, 4) = 'abcd';

Ляво закотвени думи за търсене с променлива дължина

Регистърът не е чувствителен. Индекс:

Редактиране :Почти забравих:Ако стартирате своя db с локал, различен от 'C' по подразбиране, трябва да изрично посочете операторния клас - text_pattern_ops в моя пример:

CREATE INDEX t_a_lower_idx
ON t (lower(left(a, <insert_max_length>)) text_pattern_ops);

Заявка:

SELECT * FROM t WHERE lower(left(a, <insert_max_length>)) ~~ 'abcdef%';

Може да използва индекса и е почти толкова бърз, колкото варианта с фиксирана дължина.

Може да се интересувате от тази публикация в dba.SE с повече подробности относно съвпадението на шаблон , особено последната част за операторите ~>=~ и ~<~ .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoose:Как да вмъкна един поддокумент - не масив

  2. C# MongoDB - Изтеглете елемент от масива на вложен документ въз основа на ID

  3. MongoDB atomic findOrCreate:findOne, вмъкнете, ако не съществува, но не актуализирайте

  4. Не може да се вари инсталиране на mongodb на mac os 10.12

  5. Графични DBs срещу Документ DBs срещу Triplestores