这是结构的简化版本(省略了一些常规的varchar cols):
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_name
或tire
的列)。
car
和tire
表都有约。 1,5K条目。 client
不超过500,并且由于某种原因,它仍然需要10秒才能完成(更糟糕的是,框架运行两次,首先检查有多少行,然后实际限制到所请求的页面)
我感觉这个查询非常低效,我只是不知道如何优化它。
提前致谢。
答案 0 :(得分:1)
首先,阅读MySQL's EXPLAIN syntax。
您可能需要在join子句中的每一列上以及框架在WHERE和SORT子句中使用的每一列上都有索引。有时多列索引优于单列索引。
您的框架可能不需要嵌套查询。未编程并创建视图或将参数传递给存储过程可能会为您提供更好的性能。
有关SO的更好建议,请始终在问题中包含DDL和样本数据(作为INSERT语句)。您也应该在性能问题上包含EXPLAIN输出。