Ako dosiahnem najefektivenjsie a narychlejsie vyhladavanie pomocou PHP/MySQL (momentalne mi tak hadze vysledok behom 5 sekund), aby som dosiahol vysledky do 1 sekundy?
V tabulke mam 504355 zaznamov, engine InnoDB.
search engine PHP/MySQL
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: search engine PHP/MySQL
Ukáž návrh tvojej DB a spôsob dopytov.
-
harrison314
Hardcore addict
- Príspevky: 8222
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: search engine PHP/MySQL
Ak nepouzivas fulltext, tak ho pouzi, ak ho pouzivas tak budes musiet siahnut po specializovanom rieseni:elasticsearch, sphinx, solr,...
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: search engine PHP/MySQL
fulltext na innoDB je v až MySQL 5.6.4 a vyššie, takže to mal aj napísať akú má verziu, a vyhli by sme sa zbytočným trom príspevkom vrátane môjho
-
sanyika
Medium Star
- Príspevky: 364
- Registrovaný: 11 apr 2006, 15:35
- Bydlisko: Treti smetiak vpravo....d
Re: search engine PHP/MySQL
zaznamy do nasledovnej tabulky si generujem pomocou scriptu v croneWeb server
Apache/2.2.14 (Ubuntu)
MySQL client version: 5.1.69
PHP extension: mysqli
Kód: Vybrať všetko
--
-- Table structure for table `search_table`
--
CREATE TABLE IF NOT EXISTS `search_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vendor_id` tinyint(1) NOT NULL DEFAULT '1',
`sid` varchar(32) COLLATE utf8_czech_ci NOT NULL,
`name_orig` varchar(128) COLLATE utf8_czech_ci NOT NULL,
`name` varchar(128) COLLATE utf8_czech_ci NOT NULL,
`name_preg` varchar(128) COLLATE utf8_czech_ci NOT NULL,
`help1` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`help2` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`type` tinyint(4) NOT NULL,
`priority` smallint(6) NOT NULL,
`active` tinyint(1) NOT NULL,
`lang` varchar(3) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `vendor_id` (`vendor_id`,`type`,`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=2731231 ;Kód: Vybrať všetko
INSERT INTO `search_table` (`id`, `vendor_id`, `sid`, `name_orig`, `name`, `name_preg`, `help1`, `help2`, `type`, `priority`, `active`, `lang`) VALUES
(2731209, 0, '4748389', 'Julian Assange: Neautorizovaná autobiografie', 'julian assange: neautorizovana autobiografie', 'julianassangeneautorizovanaautobiografie', '9788074620126', '978-80-7462-012-6', 1, 0, 1, ''),
(2731215, 0, '4748397', 'Když jsme zhubly my, zhubnete i vy', 'kdyz jsme zhubly my, zhubnete i vy', 'kdyzjsmezhublymyzhubneteivy', '9788072175253', '978-80-7217-525-3', 1, 0, 1, '');
Kód: Vybrať všetko
$sresults[1] = mq_select_a("search_table", "sid", "sid", "(name LIKE '%{$keyword}%' OR help1 LIKE '{$keyword}' OR help2 LIKE '{$keyword}%') AND `type`=1 AND active=1 AND vendor_id={$domain->vendor}", "sid", "ORDER BY priority DESC");
if(count($sresults[1]) == 0) {
$skeyword = preg_replace("/[^a-z0-9]*/i","",$keyword);
$sresults[1] = mq_select_a("search_table", "sid", "sid", "name_preg LIKE '%{$skeyword}%' AND `type`=1 AND active=1 AND vendor_id={$domain->vendor}", "sid", "ORDER BY priority DESC");
}-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: search engine PHP/MySQL
čo je za funkciu mg_select_a? Možno je samotná tá funkcia neoptimálne napísaná, ale ak je to iba nejaký wraper pre klasické mysql(i)_query tak s tým nič nenarobíš. Jediné dve riešenia čo máš, sú:
1) prechod na aktuálnu verziu mysql a používať fulltext
2) totálne prerobiť celý návrh, a vytvoriť si samostatnú tabuľku so slovami a idečkami záznamov kde sa nachádzajú. V podstate takú indexovú tabuľku
to, že je to ale pomalé, môže spôsobovať aj niečo iné, a nie samotné toto vyhladávanie. Prečítaj si napríklad toto: http://www.ajaxline.com/node/2099
1) prechod na aktuálnu verziu mysql a používať fulltext
2) totálne prerobiť celý návrh, a vytvoriť si samostatnú tabuľku so slovami a idečkami záznamov kde sa nachádzajú. V podstate takú indexovú tabuľku
to, že je to ale pomalé, môže spôsobovať aj niečo iné, a nie samotné toto vyhladávanie. Prečítaj si napríklad toto: http://www.ajaxline.com/node/2099
-
sanyika
Medium Star
- Príspevky: 364
- Registrovaný: 11 apr 2006, 15:35
- Bydlisko: Treti smetiak vpravo....d
Re: search engine PHP/MySQL
dakujem.... to s tym FULLTEXTom pre InnoDB som ani netusil. Vela to pomoze ked to nasadim.