On Wed, 4 Mar 2015 13:21:04 +0100
Jure Pečar <pega...@nerv.eu.org> wrote:

> SELECT DISTINCT m.message_idnr FROM dbmail_mimeparts p 
>       LEFT JOIN dbmail_partlists l ON p.id=l.part_id 
>       LEFT JOIN dbmail_physmessage s ON l.physmessage_id=s.id 
>       LEFT JOIN dbmail_messages m ON m.physmessage_id=s.id 
>       LEFT JOIN dbmail_mailboxes b ON m.mailbox_idnr = b.mailbox_idnr 
>       WHERE b.mailbox_idnr=87 AND m.status IN (0,1)  AND (l.part_key > 1 OR 
> l.is_header=0) AND p.data LIKE BINARY '%Gls%' 
>       ORDER BY m.message_idnr

My conclusions about this query are:

* dbmail_mimeparts.data is type longblob
* ORDER BY requires temp table
* which could go to memory table, but it does not support blob/text types, 
therefore it goes to disk
* LIKE begins with %, therefore it cannot use indexes
* which means full table scan
* on disk :D

Also LIKE BINARY is many times (3+) slower then LIKE. The only difference 
between the two is that one is case sensitive while the other is not.

Things we could investigate:
* changing dbmail_mimeparts.data type to something that memory engine supports
* like / like binary ... do we need case sensitivity?
* mysql 5.6 full text search?
* external indexing?

Paul?


-- 

Jure Pečar
http://jure.pecar.org
_______________________________________________
DBmail mailing list
DBmail@dbmail.org
http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail

Reply via email to