MySQL polno besedilo Išči

Danes sem igral za optimizacijo počasi SQL prijavni obrazec

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Kje je problem tukaj – последната част ‘%word%’ in v še bolj posebni znak % pred besedo, za kaj počnemo. Nadomestni simbol % ,katero koli vrednost, zahtevamo, neposredno prevaja neposredno počasi, ker na ta način, je vprašanje, ki ne preprečujejo, da bi z uporabo indeksov na področju. Rešitev, kot vedno je, vendar to ni vedno jasno, 😆 na Splošno MySQL imate rešitev za to težavo fulltext iskanje indeksiranje polja. Kot je sprememba polje veliko napisana v dokumentacijo, vendar bom na kratko opišete, kako spremeniti te poizvedbe, ker smo prejeli majhno gledališče končno. Si, kako uporabiti fulltext polje nad, zahtevo morajo biti spremembe v vrsto:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Tako strukturo je očitno in ne potrebuje nepotrebne razprave. Na to vprašanje bo učinek, če beseda, ki vam, da zahtevo, najmanj 4 znaki, privzeta vrednost, če jih želite spremeniti, morate določiti vrednost, želite svoj. cnf v delu [tusdi] izjavo ft_min_word_len=3 ali 2, 1 ni dobra izbira očitno 😉 . Ko spremenite vrednost in ponovno zaženite strežnik mysql-morate storiti popravilo tabel je, da bi za indeks, ki je stopil v veljavo. Tukaj, vse je jasno: Jaz bi spremembe, znova zaženite, rebeldom indeksi in da na zahtevo in sem vrne 0 da bi 😀 Posvetuje

SHOW VARIABLES

Vidim, da so vrednosti, Vprašala sem začel veljati, rebeldom, indekse – enak rezultat. 🙄 Neprijetno, zelo neprijetno. Tukaj in potem se je začela ena velika Rogaine in praskami za ključ v skladišče 😀, Ki je bil zelo, zelo zanimivo. Na Splošno, Začel sem brati dokumentacijo, ne vem, kaj je pot in prišel do zanimivega prehoda

Taka tehnika deluje najbolje z velike zbirke (v resnici, to je bila skrbno izbrana ta način). Za zelo majhne mize, beseda distribucije ne ustrezno odražajo njihovo semantično vrednost, in ta model je lahko včasih proizvajajo bizarno rezultati. Za primer, čeprav beseda "MySQL", ki je prisotna v vsaki vrstici izdelki tabeli je prikazano prej, poiščite besedo, ne proizvaja rezultate

DOLGI 😳 dati moj majhen pladenj – še vedno, to je bil test. Naše poizvedbe v eno veliko mizo z več kot 2 000 000 red in stvari incident. Tudi to je očitno problem. Da bi razumeli sklep, Ugotavljam na kratko, kaj polno besedilno iskanje podpore 3 napredni način LOGIČNA VREDNOST , IZRAZI in NARAVNI JEZIK kot zadnji del privzeto. Za različne načine je mogoče najti v dokumentaciji,, Bom razložiti, 2-3 besede za MATEMATIČNE, ker to je vse o. Podpira logičnimi operatorji IN, ALI , NE, in tako naprej, in lahko to storite različne uroke s priljubljenimi besedne zveze, tam, ne drugo in tako naprej. Podpira in simbolov *, enakovreden nadomestni znaki % 😉 To je uporabno,, ko boste iskali besedo, ki po velikosti ft_min_word_len ali majhne pladnji ;). Vsaj imam tabela okoli 100 linije so kot nalašč. Imate samo videti izpolnjen prijavni:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Tukaj zdaj prihaja trenutek, ali delamo z uporabo nadomestnih znakov, indeksiranje – odgovor: ne vem. Mislim, da načeloma, kot za, ker to ni naveden v dokumentaciji, vendar se v dokumentaciji očitno ni reči ali pokazati veliko stvari 😀

Okrepljeno z Zemanta

2 comments

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

pusti odgovor

Vaš e-poštni naslov ne bo objavljen. Zahtevana polja so označena *

Anti SPAM *