Sphinx wildcards och MySQL memory tables

Har tyvärr inte fått gjort så mycket gjort på mina projekt i helgen pga sociala aktiviteter men ett och annat har jag hunnit med och bl.a så har jag lärt mig hur man gör s.k ”wildcard” sökningar i Sphinx samt hur MySQL:s memory tables fungerar (och inte fungerar):

**

Genom att sätta min_prefix_len = 1 samt enable_star = 1 i sphinx.conf så är det möjligt att söka efter exempelvis foo* i Sphinx. Glöm inte att starta om searchd processen.

**

Minnestabeller MySQL är bl.a bra om man vill göra snabba sökningar och då går dessa direkt mot minnet istället för disk. Jag testade att stoppa in 12Mb data i en tabell och tittade sedan hur mycket minne MySQL processen tog:

Först så skapar jag en tabell med engine=memory och sedan populerar jag den med information enligt:

set @@tmp_table_size= 4294967295;

set @@max_heap_table_size= 4294967295;

CREATE TABLE lookup (id INT, INDEX USING HASH (id),`text` varchar(255) NOT NULL) ENGINE=MEMORY CHARSET=utf8;

INSERT INTO lookup SELECT id,text FROM texts;

Sökningar direkt i texts tar ca 1.5 sekunder (InnoDB med UNIQUE KEY) men sökningar mot minnestabellen lookup tar 0.3 sekunder! Dock så tar MySQL processen 472MB mer minne och då har jag enbart stoppat in 12MB data i memorytabellen. Ouch!

Läs mer på MySQL.com om The MEMORY (HEAP) Storage Engine.

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *