Autor Zpráva
Oldaa
Profil *
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 *
Jak dlouho ten dotaz trvá? Jaký je explain? Proč v order by násobíte pětkou?
Oldaa
Profil *
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 *
Podle explainu nemůže použít index (to bude asi důvod zápisu do slow logu). Je tabulka typu myisam?
A násobení tam bylo kvůli tomu, aby match jména mělo 5× větší váhu, než match popis
Násobení stále nechápu, match popis v order by přeci nemáte.
Oldaa
Profil *
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 *
Co vrátí?
show indexes from clanky
Oldaa
Profil *
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 *
clanky je view na tabulku blog?
Používáte v připojení stejnou znakovou sadu, která je nastavená na těch sloupcích?
Oldaa
Profil *
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 *
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.
Pokud Vás trápí zápisy do slow logu, můžete si udělat fulltextový index na dvou sloupcích (jmeno, popis) a vyhledávat v něm...
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0