Mysql 使用多个连接进行1k条目查询最多需要10秒

Mysql 使用多个连接进行1k条目查询最多需要10秒,mysql,left-join,performance,Mysql,Left Join,Performance,这里是结构的简化版本,省略了一些常规的varchar col: CREATE TABLE `car` ( `reg_plate` varchar(16) NOT NULL default '', `type` text NOT NULL, `client` int(11) default NULL, PRIMARY KEY (`reg_plate`) ) 下面是我试图运行的查询: SELECT * FROM ( SELECT car.*, tire.id as ti

这里是结构的简化版本,省略了一些常规的varchar col:

CREATE TABLE `car` (
 `reg_plate` varchar(16) NOT NULL default '',
 `type` text NOT NULL,
 `client` int(11) default NULL,
 PRIMARY KEY  (`reg_plate`)
)
下面是我试图运行的查询:

SELECT * FROM (
SELECT 
    car.*,
    tire.id as tire,
    client.name as client_name
FROM 
    car
        LEFT JOIN client ON car.client = client.id
        LEFT JOIN tire ON tire.reg_plate = reg_plate
GROUP BY car.reg_plate
) t1
嵌套查询是必要的,因为框架有时会添加WHERE/SORT子句,这些子句假定存在名为client\u name或tire的列。 汽车和轮胎表都有大约1,5K的条目。客户端的行数不超过500行,出于某种原因,完成这项工作仍需要10秒。更糟糕的是,框架会运行它两次,首先检查有多少行,然后实际限制到请求的页面

我感觉这个查询效率很低,我只是不知道如何优化它

提前感谢。

首先,请阅读

您可能需要对join子句中的每一列以及框架在WHERE和SORT子句中使用的每一列建立索引。有时多列索引比单列索引好

您的框架可能不需要嵌套查询。取消测试和创建视图或向存储过程传递参数可能会提高性能


要获得更好的建议,请始终在问题中包含DDL和示例数据作为插入语句。您可能还应该在性能问题中包含解释输出。

为什么要使用没有聚合的GROUP BY?这是MySQL最糟糕的特性之一…你有什么索引?你能对你的查询做一个解释并在这里发布结果吗?试着把EXPLAIN EXTENDED放在你的查询前面,然后发布结果……并提供查询中其他表的结构query@JNK否则,一辆车将有多行。例如,我需要在select子句中添加countcar.reg_车牌吗?哇!为这些列编制索引确实将执行时间从10秒减少到了0.1秒:D非常抱歉,我自己无法解决这个问题,我仍然需要收集更多关于数据库的知识。