0

我有以下结构:

CREATE TABLE `tbl1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `tid` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `time` datetime NOT NULL,
 `count` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `tid_uid` (`tid`,`user_id`),
 KEY `tid_time` (`tid`,`time`)
) 

    CREATE TABLE `tbl2` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_id` int(11) unsigned NOT NULL,
 `field_to_order_by` int(11) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `user_id` (`user_id`),
 KEY `field_to_order_by` (`field_to_order_by`)
) 

我正在尝试执行以下查询:

SELECT * FROM tbl1 
LEFT JOIN tbl2 ON tbl1.user_id=tbl2.user_id 
WHERE tbl1.tid=13 AND time > DATE_SUB(NOW(), INTERVAL 1 WEEK) 
ORDER BY tbl2.field_to_order_by DESC LIMIT 200  

我面临的性能问题是由于ORDER BY连接表字段的。如果我删除它,甚至用WHERE同一领域的条件替换它,我将获得巨大的改进。

如何/我可以通过这种 JOIN 和 ORDER BY 的组合获得合理的性能,还是只能通过反规范化来解决?

这是解释:

id  select_type  table  type    possible_keys     key       key_len  ref           rows     Extra  
1   SIMPLE       tbl1   range   tid_uid,tid_time  tid_time  12       NULL          221664   Using where; Using temporary; Using filesort  
1   SIMPLE       tbl2   eq_ref  user_id           user_id   4        tbl1.user_id  1    
4

0 回答 0