Hi all,

I'm running a small mail archive and have a little problem with the fulltext search performance.
I really appreciate any tips/design suggestions (even if it dont have to do with the search problem ;) ).


Database schema:

mysql> describe msg_header;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      |      | PRI | NULL    | auto_increment |
| parent  | int(11)      | YES  | MUL | NULL    |                |
| bodyid  | int(11)      | YES  |     | NULL    |                |
| list    | varchar(80)  | YES  | MUL | NULL    |                |
| mfrom   | varchar(80)  | YES  |     | NULL    |                |
| mto     | varchar(80)  | YES  |     | NULL    |                |
| subject | varchar(200) | YES  | MUL | NULL    |                |
| mcc     | varchar(80)  | YES  |     | NULL    |                |
| sdate   | varchar(45)  | YES  |     | NULL    |                |
| batch   | varchar(80)  | YES  | MUL | NULL    |                |
| msgid   | varchar(90)  | YES  |     | NULL    |                |
| date    | datetime     | YES  | MUL | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)


mysql> describe msg_body; +-------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | body | text | YES | MUL | NULL | | +-------+---------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)

index from msg_body;

*************************** 1. row ***************************
Table: msg_body
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 295996
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 2. row ***************************
Table: msg_body
Non_unique: 1
Key_name: id
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 295996
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 3. row ***************************
Table: msg_body
Non_unique: 1
Key_name: body
Seq_in_index: 1
Column_name: body
Collation: A
Cardinality: 295996
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: FULLTEXT
Comment:
3 rows in set (0.00 sec)


The search querys using fulltext indexes takes around > 1minute and no one want to use a search that slow :/


The Query is the following:

SELECT msg_header.bodyid,msg_header.id, msg_header.subject,msg_header.mfrom, msg_header.date, msg_header.list FROM
msg_header,msg_body WHERE msg_header.bodyid=msg_body.id AND match(msg_header.list) against('LISTNAME')
AND match(msg_body.body) AGAINST('WORD');


For a couple of month ago the msg-body and msg-headers parts where in the same table and the fulltext search was really fast < 1 sec, but everything else just became slower so i splitted it upp in two tables. But now i need to match msg_header.bodyid against msg_body.id to be able to now witch body that belongs to with header and i think thats where things get slow..

I ran an explain select query and the following result turned upp

+------------+----------+-----------------+---------+---------+-------------------+------+-------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+------------+----------+-----------------+---------+---------+-------------------+------+-------------+
| msg_header | fulltext | list_4 | list_4 | 0 | | 1 | Using where |
| msg_body | eq_ref | PRIMARY,id,body | PRIMARY | 4 | msg_header.bodyid | 1 | Using where |
+------------+----------+-----------------+---------+---------+-------------------+------+-------------+
Does this means that the fulltext index on msg_body.body is'nt being used?


The machine is an Intel PIII 500Mhz, 512MB memory and IDE disks running NetBSD 1.6.3, mysql 4.0.20.
The database contains about 300 000 rows and the size is ~1GB.



// Fredrik Carlsson






-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to