[rt-users] more full context search mysql problems
Brian Kerr
kerrboy at gmail.com
Thu Dec 14 13:04:23 EST 2006
RT 3.4.5, MySQL 4.1.18
If I perform a search for "Content like mysearchterm" the following
long-running queries are run on the DB:
# Time: 061214 12:52:16
# User at Host: rt_user[rt_user] @ localhost []
# Query_time: 13 Lock_time: 0 Rows_sent: 1 Rows_examined: 546064
SELECT COUNT(DISTINCT main.id) FROM Tickets main , Transactions
Transactions_1, Attachments Attachments_2 WHERE
((Transactions_1.ObjectType = 'RT::Ticket')) AND ((main.EffectiveId =
main.id)) AND ((main.Status != 'deleted')) AND ((main.Type =
'ticket')) AND ( ( (Attachments_2.Content LIKE
'%mycontentsearch%')AND(Attachments_2.TransactionId =
Transactions_1.id)AND(main.id = Transactions_1.ObjectId) ) );
# Time: 061214 12:52:28
# User at Host: rt_user[rt_user] @ localhost []
# Query_time: 12 Lock_time: 0 Rows_sent: 1 Rows_examined: 546064
SELECT COUNT(DISTINCT main.id) FROM Tickets main , Transactions
Transactions_1, Attachments Attachments_2 WHERE
((Transactions_1.ObjectType = 'RT::Ticket')) AND ((main.EffectiveId =
main.id)) AND ((main.Status != 'deleted')) AND ((main.Type =
'ticket')) AND ( ( (Attachments_2.Content LIKE
'%mycontentsearch%')AND(Attachments_2.TransactionId =
Transactions_1.id)AND(main.id = Transactions_1.ObjectId) ) );
# Time: 061214 12:52:41
# User at Host: rt_user[rt_user] @ localhost []
# Query_time: 13 Lock_time: 0 Rows_sent: 1 Rows_examined: 546066
SELECT COUNT(DISTINCT main.id) FROM Tickets main , Transactions
Transactions_1, Attachments Attachments_2 WHERE
((Transactions_1.ObjectType = 'RT::Ticket')) AND ((main.EffectiveId =
main.id)) AND ((main.Status != 'deleted')) AND ((main.Type =
'ticket')) AND ( ( (Attachments_2.Content LIKE
'%mycontentsearch%')AND(Attachments_2.TransactionId =
Transactions_1.id)AND(main.id = Transactions_1.ObjectId) ) );
# Time: 061214 12:52:53
# User at Host: rt_user[rt_user] @ localhost []
# Query_time: 12 Lock_time: 0 Rows_sent: 563 Rows_examined: 547192
SELECT DISTINCT main.* FROM Tickets main , Transactions
Transactions_1, Attachments Attachments_2 WHERE
((Transactions_1.ObjectType = 'RT::Ticket')) AND ((main.EffectiveId =
main.id)) AND ((main.Status != 'deleted')) AND ((main.Type =
'ticket')) AND ( ( (Attachments_2.Content LIKE
'%mycontentsearch%')AND(Attachments_2.TransactionId =
Transactions_1.id)AND(main.id = Transactions_1.ObjectId) ) ) ORDER BY
main.id ASC;
It looks like it is running the same expensive query 3 times in a row
for some reason. Is this nessecary?
Also, do you guys add indices to your attachments tables?
mysql> explain SELECT COUNT(DISTINCT main.id) FROM Tickets main ,
Transactions Transactions_1, Attachments Attachments_2 WHERE
((Transactions_1.ObjectType = 'RT::Ticket')) AND ((main.EffectiveId =
main.id)) AND ((main.Status != 'deleted')) AND ((main.Type =
'ticket')) AND ( ( (Attachments_2.Content LIKE
'%mycontentsearch%')AND(Attachments_2.TransactionId =
Transactions_1.id)AND(main.id = Transactions_1.ObjectId) ) );
+----+-------------+----------------+--------+---------------------------+---------+---------+---------------------------------+--------+-------------+
| id | select_type | table | type | possible_keys
| key | key_len | ref | rows |
Extra |
+----+-------------+----------------+--------+---------------------------+---------+---------+---------------------------------+--------+-------------+
| 1 | SIMPLE | Attachments_2 | ALL | Attachments2
| NULL | NULL | NULL | 409952 |
Using where |
| 1 | SIMPLE | Transactions_1 | eq_ref | PRIMARY,Transactions1
| PRIMARY | 4 | rt3.Attachments_2.TransactionId | 1 |
Using where |
| 1 | SIMPLE | main | eq_ref |
PRIMARY,Tickets4,Tickets5 | PRIMARY | 4 |
rt3.Transactions_1.ObjectId | 1 | Using where |
+----+-------------+----------------+--------+---------------------------+---------+---------+---------------------------------+--------+-------------+
3 rows in set (0.00 sec)
More information about the rt-users
mailing list