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 )

Reply via email to