MySQL查询在join语句上非常慢
所以我有两张桌子:MySQL查询在join语句上非常慢,mysql,join,Mysql,Join,所以我有两张桌子: | id | make | model | color | | 1234 | BMW | M2 | blue | | 2345 | Audi | A3 | black | 及 第一个表有大约500000辆独特的车辆。第二个表列出了几天内每天车辆的价格(将来会更多) 现在我想执行一个简单的join语句: SELECT count(v.id)
| id | make | model | color |
| 1234 | BMW | M2 | blue |
| 2345 | Audi | A3 | black |
及
第一个表有大约500000辆独特的车辆。第二个表列出了几天内每天车辆的价格(将来会更多)现在我想执行一个简单的join语句:
SELECT count(v.id)
FROM nm_voertuig v
JOIN nm_voertuig_statistieken vs
ON v.id = vs.id
WHERE model = 'BRZ'
如果我删除join,它会非常快,但是使用join,加载大约需要20秒我试图添加一些索引。但这似乎没有帮助 我做错了什么 编辑
以nm_voertuig为单位的索引: 编辑2
这是解释的结果: @Wouter den Ouden: 我已经看到您的查询使用了索引 试试这个:首先快速计数,只加入一行,而不是全部
SELECT cnt.*, vs.* FROM (
SELECT count(v.id), id
FROM nm_voertuig v
WHERE model = 'BRZ'
) AS cnt
JOIN nm_voertuig_statistieken vs
ON cnt.id = vs.id;
请让我知道它是否适用于您什么索引?经验法则是将索引放在“决策”上下文中涉及的所有字段上:
join
、where
、order by
,等等。。。select count()在某些表类型上基本上是即时的,因为行计数存储在表的元数据中,数据库不必计算实际记录。索引包含哪些字段?我真的不知道索引是如何工作的。将使用索引编辑我的帖子您可能需要另一个表nm_voertuig_statistieken的id索引,但不要猜测:检查执行计划将显示正在进行的索引查找和完整表扫描。我正在使用Navicat和php mysqli来使用数据库。我怎样才能得到这些执行计划?
SELECT cnt.*, vs.* FROM (
SELECT count(v.id), id
FROM nm_voertuig v
WHERE model = 'BRZ'
) AS cnt
JOIN nm_voertuig_statistieken vs
ON cnt.id = vs.id;