Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询在join语句上非常慢_Mysql_Join - Fatal编程技术网

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;