2016-06-08 117 views
1

所以我有兩個表:的MySQL查詢的語句組合非常緩慢

| id  | make  | model  | color | 
| 1234 | BMW  | M2   | blue  | 
| 2345 | Audi  | A3   | black | 

| id  | date  | price  | 
| 1234 | 2015-09-23 | 34000  | 
| 1234 | 2015-10-23 | 33500  | 

第一個表有50多輛獨一無二的。第二個表有從日常的車輛價格幾天(將更多的未來)

現在我想執行一個簡單的連接語句:如果我刪除加入

SELECT  count(v.id) 
FROM   nm_voertuig v 
JOIN   nm_voertuig_statistieken vs 
ON   v.id = vs.id 
WHERE   model = 'BRZ' 

它的速度非常快,但加入後需要大約20秒的時間才能加載。
我試圖添加一些索引。但它似乎沒有幫助。

我在做什麼錯?

EDIT
指標的nm_voertuig: https://gyazo.com/cd1628862574ee3c7beb0520484819cc

編輯2
這是由該結果說明: https://gyazo.com/18c1ad77718e8cdf9d19a3846cc4472c

+5

指標?經驗法則是在涉及「決定」上下文的所有字段上放置索引:「join」,「where」,「order by」等... select count()對於某些表類型可能基本上是瞬時的,因爲行計數存儲在表的元數據中,並且數據庫不必計算實際記錄。 –

+0

您的索引包含哪些字段? – knittl

+0

我真的不知道索引是如何工作的。將使用索引編輯我的文章 –

回答

2

@Wouter巢穴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; 

請讓我知道它是否適合你什麼

+0

它確實工作,它確實快得多 –