我想知道內部連接在mysql中的工作原理。INNER JOIN執行/評估順序
如果我不
SELECT * FROM A a
INNER JOIN B b ON a.row = b.row
INNER JOIN C c ON c.row2 = b.row2
WHERE name='Paul';
它做的第一連接,然後挑選那些地方名=保羅?因爲當我這樣做的時候,這是超級減速慢。
是有辦法沿線做一些事情:
SELECT * FROM (A a WHERE name='paul')
INNER JOIN B b ON a.row = b.row
INNER JOIN C c ON c.row2 = b.row2]
當我嘗試這樣的說法,我只是得到一個錯誤。
或者,更好的是隻有3個單獨的查詢,一個用於A,B和C?例如:
string query1 = "SELECT * FROM A WHERE name = 'paul'";
//send query, get data reader
string query2 = "SELECT * FROM b WHERE b = " + query1.b;
//send query, get data reader
string query3 = "SELECT * FROM C WHERE c = " + query1.c;
//send query, get data reader
顯然這只是僞代碼,但我認爲它說明了一點。
哪種方式更快/推薦?
編輯 表結構:
**tblTimesheet**
int timesheetID (primary key)
datetime date
varchar username
int projectID
string description
float hours
**tblProjects**
int projectID (primary key)
string project name
int clientID
**tblClients**
int clientID
string clientName
The join that I want is:
select * from tblTimesheet time
INNER JOIN tblProject proj on time.projectID = proj.projectID
INNER JOIN tblClient client on proj.clientID = client.clientID
WHERE username = 'paul';
類似的東西
第一個查詢看起來很好的教程;你的行號是否被索引? –
這個問題也在這個問題上觸及 - http://stackoverflow.com/questions/228424/in-what-order-are-mysql-joins-evaluated – dash