sql >> Databáze >  >> RDS >> Sqlserver

SQL Server Full Text Catalog a automatické doplňování

Můj úvodní komentář, Předpokládám, že celé jméno počítače je něco podobného jako Jméno + ' ' + Příjmení -- můžete dotaz vytvořit jako křestní jméno jako 'Carl%' a příjmení jako 'Gari%' byl určen ke shromažďování informací. Děkuji za odpověď.

Sám jsem to nezkoušel (a záleží to pouze na vašem prostředí), ale můžete přidat podobné klauzule do dotazu založeného na obsahu a porovnat plány dotazů s verzí obsahuje.

Existují 3 možné dotazy zřejmé dotazy

A Contains version -- your existing query
A Like Version -- as I commented
A Combined version -- using like and contains

Nemyslím si, že máte nutně pravdu v tom, že použití fullindexového vyhledávání je vždy rychlejší než verze LIKE, protože si myslím, že správná odpověď je, záleží na tom.

Pokud máte indexy na příjmení (nebo také křestní jméno), verze „jako“ by měla provést indexované vyhledávání. Bude záležet na vaší distribuci klíčů a procentuální shodě. To znamená, že hledání příjmení jako 'G%' a křestního jména jako 'Carl%' než 'Gari%' a 'Carl%' by bylo mnohem pomalejší, pokud by indexoval pouze příjmení. Pokud tedy máte dostatečně dlouhé vyhledávací klíče, verze LIKE bude pravděpodobně rychlejší než verze obsahuje. Budete muset vyzkoušet, abyste věděli, co funguje nejlépe.

Může se stát, že kombinovaná verze je vždy nejlepší nebo alespoň dostatečně dobrá. Ale určitě bych to zkusil jako první, než budu postupovat podle níže uvedené strategie.

Celková strategie, kterou bych navrhl, je:

Přestaňte používat přírůstkové vyhledávání, dokud uživatel nezadá alespoň několik znaků – pravděpodobně zaplatíte velkou část výkonu, protože to pro uživatele vašeho webu nemá téměř žádnou skutečnou hodnotu. Doporučuje se, abyste neprováděli přírůstkové vyhledávání, dokud nezadají alespoň 3 znaky. Protože jste nezmínili, že již vyžadujete minimální počet znaků před inkrementálním vyhledáváním.

Pokud je to vetováno, stejná základní strategie, ale nevyvoláte inkrementální vyhledávání, dokud neuplyne NN milisekund od posledního napsání znaku nebo napsání číselných znaků> nějaká délka. Ve skutečnosti, protože některá příjmení mají pouze 2 znaky, musíte tuto strategii ve skutečnosti použít.

Stejně tak bych neprováděl žádné přírůstkové vyhledávání bez ohledu na délku, pokud uživatel rychle zadává nové znaky, aby se zabránilo zbytečnému hledání, které uživatel nepoužívá.

Pokud není kombinovaný dotaz vždy dostatečně dobrý, mějte na svém serveru dva různé uložené procesy, abyste mohli vrátit výsledky vyhledávání, jeden je podobná verze a druhý obsahuje verzi. Zavolejte verzi, od které se očekává, že dosáhnete nejlepších výsledků v závislosti na tom, jak velká část názvu byla poskytnuta.




  1. Jaké je číslo MAX, pokud uložím int(255) v MySQL?

  2. Jak používat kontejner PostgreSQL se stávajícími daty?

  3. Tabulky MyISAM a InnoDB v jedné databázi

  4. dotaz Oracle SQL pro výpis všech dat předchozího měsíce