Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
Existuje v MySQL nějaký příkaz nebo vhodnější metoda na hledání více výrazů namísto použítí LIKE OR ?
SELECT * FROM tabulka WHERE pole LIKE 'slovo1%' OR pole LIKE 'slovo2%' OR pole LIKE 'slovo3%' OR pole LIKE 'slovo4%' |
||
ninja Profil |
#2 · Zasláno: 28. 12. 2010, 22:18:42
Použijte MySQL fulltext.
|
||
xlifer Profil |
#3 · Zasláno: 28. 12. 2010, 23:25:32 · Upravil/a: xlifer
Nejvhodnější mi připadá použítí REGEXP (RLIKE), co myslíte?
I když nevím zda je to efektivnější než LIKE nebo fulltext MATCH, AGAINST? SELECT * FROM tabulka WHERE sloupec REGEXP '(slovo1)|(slovo2)|(slovo3)|(slovo4)'; připadně tedy takto: SELECT * FROM tabulka WHERE MATCH(sloupec) AGAINST('slovo1* slovo2* slovo3* slovo4*' IN BOOLEAN MODE); |
||
xlifer Profil |
#4 · Zasláno: 29. 12. 2010, 23:10:56
Které provedení by jste tedy doporučili z výše uvedených návrhů?
|
||
ninja Profil |
#5 · Zasláno: 30. 12. 2010, 01:51:20
xlifer: Nejrychlejší by měl být fulltext a pokud znáte a překousnete jeho jistá omezení, použil bych jej.
Pokud fulltext nevyhovuje, tak sérii LIKŮ. Ať LIKE nebo REGEXP, určitě mít na prohledávaném sloupci index. |
||
xlifer Profil |
#6 · Zasláno: 31. 12. 2010, 03:24:25
ninja:
A jaké významné omezení vlastně fulltext má oproti LIKE nebo REGEXP? |
||
TomášK Profil |
#7 · Zasláno: 31. 12. 2010, 04:04:39
xlifer:
Zjednodušeně fulltext funguje tak, že si vytvoří databázi slov, která se v textu vyskytují a pamatuje si, kde se vyskytují. Proto dokáže rychle odpovědět na dotaz, které záznamy obsahují dané slovo nebo skupinu slov. Pokud vás zajímají výskyty slov, pak je ideální. Potřebujete-li jen části slov nebo regulární výrazy, pak můžete narazit, kam až jdou možnosti v tomto směru nevím. Při použití LIKE je třeba projít záznamy a porovnvat, zda odpovídají zadanému patternu. Jde vytvořit INDEX, který si pamatuje několik prvních písmen slov, tedy pokud pattern vypadá 'text%', může být vyhledávání efektivní, pro '%text%' bude třeba vždy projít celou tabulku. REGEXP se chová podobně jako LIKE, ale nevím, jestli dokáže využít nějaký INDEX, je dost možné, že pokaždé bude procházet celou tabulku. V kostce by to mělo fungovat přibližně takto, ruku do ohně bych za to nedal, databáze občas dokážou víc než tuším :-) |
||
ninja Profil |
#8 · Zasláno: 31. 12. 2010, 13:56:32
Největší omezení fultextu je minimální délka slova 4 znaky (lze změnit) a stop slova (jde jen velmi težko změnit). Výhoda je možnost snadného seřazení výsledků dle relevance .
|
||
xlifer Profil |
#9 · Zasláno: 1. 1. 2011, 02:09:13
ninja:
- 4 znaky min. délka vyhledávání je nastavena jako dafault? Kde nebo jak lze tento počet změnit? - co je konkrétně myšleno tím "stop slova"? |
||
ninja Profil |
#10 · Zasláno: 1. 1. 2011, 15:57:18
xlifer: Je opravdu tak težké kliknout na první odkaz v Googlu?
|
||
xlifer Profil |
#11 · Zasláno: 2. 1. 2011, 01:41:51 · Upravil/a: xlifer
ninja:
Určitě není, ale mě přijde velký přínos tohto skvělého fóra, že se zde člověk dozví ucelené informace a názory zkušenějších z praxe, protože co si budeme povídat né vždy to v google nebo jinde je vysvětlené k pochopení, případně celý text anglicky, ap. musíte brát do úvahy, že sem nechodí všichni profíci a potřebuji věci více rozebrat nebo vysvětlit. Možná by se pak mohlo jmenovat toto fórum spíše google.jakpsatweb.cz :-) Je mi jasné, že je docela únavné odpovídat na některé stejné věci dokola, ale holt takový je život i fórum... |
||
Časová prodleva: 13 let
|
0