[rt-users] sphinx weirdness

Arkadiusz Miśkiewicz arekm at maven.pl
Wed Feb 25 04:29:08 EST 2015


Hi.

rt 4.0.10 + mysql 5.6.22 + sphinx 2.2.7

rt uses such query:

mysql> SELECT COUNT(DISTINCT main.id) FROM Tickets main JOIN Transactions Transactions_1  ON ( Transactions_1.ObjectType = 'RT::Ticket' ) AND ( Transactions_1.ObjectId = main.id ) LEFT JOIN Attachments Attachments_2  
ON ( Attachments_2.TransactionId = Transactions_1.id ) LEFT JOIN AttachmentsIndex AttachmentsIndex_3  ON ( AttachmentsIndex_3.id = Attachments_2.id )  WHERE (main.IsMerged IS NULL) AND (main.Status != 'deleted') AND 
(main.Type = 'ticket') AND ( (  ( main.Subject LIKE '%inconventus%' OR  ( AttachmentsIndex_3.query = 'inconventus' )  )  )  AND  ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) );
+-------------------------+
| COUNT(DISTINCT main.id) |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.16 sec)

mysql> EXPLAIN SELECT COUNT(DISTINCT main.id) FROM Tickets main JOIN Transactions Transactions_1  ON ( Transactions_1.ObjectType = 'RT::Ticket' ) AND ( Transactions_1.ObjectId = main.id ) LEFT JOIN Attachments 
Attachments_2  ON ( Attachments_2.TransactionId = Transactions_1.id ) LEFT JOIN AttachmentsIndex AttachmentsIndex_3  ON ( AttachmentsIndex_3.id = Attachments_2.id )  WHERE (main.IsMerged IS NULL) AND (main.Status != 
'deleted') AND (main.Type = 'ticket') AND ( (  ( main.Subject LIKE '%inconventus%' OR  ( AttachmentsIndex_3.query = 'inconventus' )  )  )  AND  ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) );
+----+-------------+--------------------+-------+------------------------+----------------+---------+-----------------------+------+----------------------------------------------------+
| id | select_type | table              | type  | possible_keys          | key            | key_len | ref                   | rows | Extra                                              |
+----+-------------+--------------------+-------+------------------------+----------------+---------+-----------------------+------+----------------------------------------------------+
|  1 | SIMPLE      | main               | range | PRIMARY,tickets_status | tickets_status | 195     | NULL                  | 2228 | Using index condition; Using where                 |
|  1 | SIMPLE      | Transactions_1     | ref   | Transactions1          | Transactions1  | 70      | const,rt3.main.id     |    1 | Using where; Using index                           |
|  1 | SIMPLE      | Attachments_2      | ref   | Attachments2           | Attachments2   | 4       | rt3.Transactions_1.id |    4 | Using index                                        |
|  1 | SIMPLE      | AttachmentsIndex_3 | ALL   | NULL                   | NULL           | NULL    | NULL                  |   20 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+--------------------+-------+------------------------+----------------+---------+-----------------------+------+----------------------------------------------------+
4 rows in set (0.00 sec)


and as you see above it finds nothing BUT if I remove
"main.Subject LIKE '%inconventus%' OR" from query it finds one ticket, why? :

mysql> SELECT COUNT(DISTINCT main.id) FROM Tickets main JOIN Transactions Transactions_1  ON ( Transactions_1.ObjectType = 'RT::Ticket' ) AND ( Transactions_1.ObjectId = main.id ) LEFT JOIN Attachments Attachments_2  
ON ( Attachments_2.TransactionId = Transactions_1.id ) LEFT JOIN AttachmentsIndex AttachmentsIndex_3  ON ( AttachmentsIndex_3.id = Attachments_2.id )  WHERE (main.IsMerged IS NULL) AND (main.Status != 'deleted') AND 
(main.Type = 'ticket') AND ( (  ( ( AttachmentsIndex_3.query = 'inconventus' )  )  )  AND  ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) );
+-------------------------+
| COUNT(DISTINCT main.id) |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.01 sec)

mysql> EXPLAIN  SELECT COUNT(DISTINCT main.id) FROM Tickets main JOIN Transactions Transactions_1  ON ( Transactions_1.ObjectType = 'RT::Ticket' ) AND ( Transactions_1.ObjectId = main.id ) LEFT JOIN Attachments 
Attachments_2  ON ( Attachments_2.TransactionId = Transactions_1.id ) LEFT JOIN AttachmentsIndex AttachmentsIndex_3  ON ( AttachmentsIndex_3.id = Attachments_2.id )  WHERE (main.IsMerged IS NULL) AND (main.Status != 
'deleted') AND (main.Type = 'ticket') AND ( (  ( ( AttachmentsIndex_3.query = 'inconventus' )  )  )  AND  ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) );
+----+-------------+--------------------+--------+------------------------+---------+---------+---------------------------------+------+-----------------------------------+
| id | select_type | table              | type   | possible_keys          | key     | key_len | ref                             | rows | Extra                             |
+----+-------------+--------------------+--------+------------------------+---------+---------+---------------------------------+------+-----------------------------------+
|  1 | SIMPLE      | AttachmentsIndex_3 | ref    | query                  | query   | 767     | const                           |    3 | Using where with pushed condition |
|  1 | SIMPLE      | Attachments_2      | eq_ref | PRIMARY,Attachments2   | PRIMARY | 4       | rt3.AttachmentsIndex_3.id       |    1 | 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,tickets_status | PRIMARY | 4       | rt3.Transactions_1.ObjectId     |    1 | Using where                       |
+----+-------------+--------------------+--------+------------------------+---------+---------+---------------------------------+------+-----------------------------------+
4 rows in set (0.00 sec)


Any idea what is going on? Additional subject searching shouldn't cause such problem
since it's ORed with the rest of that part of query.

-- 
Arkadiusz Miśkiewicz, arekm / ( maven.pl | pld-linux.org )



More information about the rt-users mailing list