Autor | Zpráva | ||
---|---|---|---|
Oldaa Profil * |
#1 · Zasláno: 22. 11. 2011, 19:44:02
Dobrý den,
na VPS se mi loguje mysql slow log, kde mám převážně toto: # Time: 111121 6:26:30 # Query_time: 0 Lock_time: 0 Rows_sent: 5 Rows_examined: 697 SELECT url, jmeno, popis FROM `clanky` WHERE (MATCH (jmeno) AGAINST ('Brigáda v OBI') ) OR (MATCH (popis) AGAINST ('Brigáda v OBI') ) ORDER BY 5 * MATCH (`clanky`.`jmeno` ) AGAINST ('Brigáda v OBI') DESC LIMIT 5; Jedná se o fulltext vyhledávání v jedné tabulce `clanky`. Indexy mám takto: ID - primary jmeno Fulltext url unique popis fulltext Jde to nějak zrychlit nebo optimalizovat? |
||
Kajman_ Profil * |
#2 · Zasláno: 23. 11. 2011, 08:57:09
Jak dlouho ten dotaz trvá? Jaký je explain? Proč v order by násobíte pětkou?
|
||
Oldaa Profil * |
#3 · Zasláno: 24. 11. 2011, 20:11:50
Netrvá až tak dlouho, záleží na vytížení serveru, ale loguje se do sql slow log souboru.
explain je tu: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE clanky ALL NULL NULL NULL NULL 693 Using where; Using filesort A násobení tam bylo kvůli tomu, aby match jména mělo 5× větší váhu, než match popis |
||
Kajman_ Profil * |
#4 · Zasláno: 24. 11. 2011, 20:30:35
Podle explainu nemůže použít index (to bude asi důvod zápisu do slow logu). Je tabulka typu myisam?
Násobení stále nechápu, match popis v order by přeci nemáte. |
||
Oldaa Profil * |
#5 · Zasláno: 24. 11. 2011, 20:38:13
Ano, tabulka je MyISAM.
ad násobení: Dříve tam bylo order by (5*match jmeno + match popis).. tzv shoda na jméně měla větší váhu. pak jsem to odmazal a omylem tam nechal. I když to 5* smažu, stále mám id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE clanky ALL NULL NULL NULL NULL 693 Using where; Using filesort |
||
Kajman_ Profil * |
#6 · Zasláno: 24. 11. 2011, 21:19:49
Co vrátí?
show indexes from clanky |
||
Oldaa Profil * |
#7 · Zasláno: 24. 11. 2011, 21:46:25
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment blog 0 PRIMARY 1 id A 693 NULL NULL BTREE blog 0 url 1 url A 693 NULL NULL BTREE blog 1 category 1 category A 16 NULL NULL BTREE blog 1 public 1 public A 3 NULL NULL BTREE blog 1 nazev 1 nazev NULL 1 NULL NULL FULLTEXT blog 1 popis 1 popis NULL 1 NULL NULL FULLTEXT blog 1 clanek 1 text NULL 1 NULL NULL FULLTEXT |
||
Kajman_ Profil * |
#8 · Zasláno: 25. 11. 2011, 00:31:05
clanky je view na tabulku blog?
|
||
Oldaa Profil * |
#9 · Zasláno: 25. 11. 2011, 08:21:34
edit: blog = clanky žádný view jen jsem udělal omylem show indexes from blog ne články..
ad kódování.. ano, všude pouívám utf8_czech_ci |
||
Kajman_ Profil * |
#10 · Zasláno: 25. 11. 2011, 09:51:29
Ono to vypadá, že s or ten explain (možná chybně) ukazuje, že nemůže použít indexy (což je divné, protože základní match against bez indexu nefunguje), ale asi je využívá. Tipuji, že na rychlost to nemá vliv.
SELECT `url`, `jmeno`, `popis` FROM `clanky` WHERE MATCH(`jmeno`, `popis`) AGAINST('Brigáda v OBI') ORDER BY MATCH(`jmeno`) AGAINST('Brigáda v OBI') DESC LIMIT 5 |
||
Oldaa Profil * |
#11 · Zasláno: 25. 11. 2011, 10:12:17
jj to je pravda, když se index odstraní, vyhledávání nefunguje.
Tak zkusím ten index na 2 sloupce a uvidím.. Děkuji za rady a čas, vypadá to, že fulltext prostě více zrychlit nepůjde. |
||
Časová prodleva: 13 let
|
0