2014-07-15 41 views
0

我正在處理需要我比較Row的每一列的任務。有很多方法可以實現,我很好奇,因爲行數很大。所以我在這裏通過示例來解釋它。SQL中的條件算法Select Query

--------------------------------------------------------------------- 
ID[P_K] | Name | Address | City | Gender | College 
--------------------------------------------------------------------- 

所以上面是一個表,這是保持從多個高校學生的數據,現在我從外部源獲取一些數據,並需要將它與我的數據庫的數據進行比較的一個基本的例子。以下是可能的方法。

  1. 我會選擇查詢與where Id = <id>並在我的代碼中一一匹配。

  2. 其他辦法,我可以做一個選擇查詢與where ID = <id> and name = <name> and so on...

所以現在我的偏好是第二個選項,因爲較小的複雜性。

現在要繼續,只有一件事情在我的腦海裏產生衝突。

問:

查詢的複雜性這兩個查詢彼此比較(考慮ID作爲主鍵):

  1. where Id = <id>

  2. where ID = <id> and name = <name> and so on...

我知道這個總數取決於我的SQL算法,我搜遍了很多沒有找到MySql的Select算法。

如果有人可以分享Select算法,這將會很有幫助。

具體到算法:

有兩種方法,該算法可以工作:

  1. For number of rows { if(whereCondition1 && whereCondition2 .... && whereCondition<N>)}
    }

  2. for number of rows { if(whereCondition1){ //Result filter according whereCondition1 if(whereCondition2){ //Result filter according whereCondition2 . . and so on... } else { continue; } } else { continue; } }

現在COMPLE第一個的xity將是O(n)。對於第二個假設ID [P_K],複雜度會降低。對?

那麼從上面哪個算法是用戶?或不是這些?

+0

你想達到什麼目的?你想比較表本身嗎?換句話說,檢查一個學生是否在更多的地方?什麼是期望的輸出? –

回答

1

每個RDBM都有自己的選擇算法,但全部都是基於SQL ANSI 99模式。

這裏的問題是RDBM如何處理然後解析它以實現更好的性能。您不必擔心這一點,唯一需要擔心的是如果您的數據庫設計合理且具有適當的索引。

那是什麼讓您使用where Id = <id>where ID = <id> and name = <name> and so on...

之間的差異如果ID是該表的PK和你所提到的syncronized與您的數據(指外部源:這些ID有相同的記錄),您只需要使用where Id = <id>,但如果這些ID不同步,則應該定義什麼將使您的註冊表具有唯一性,並創建sql條件並確保您具有適當的索引。

+0

這件事我知道只有ID [PK]足以獲得所需的行。問題是檢查外側數據庫值是否與數據庫值匹配。我現在會編輯一下,以更好地解釋我的觀點。 –

+0

然後你去聽我的陳述:'但是如果這些ID不同步,那麼你應該定義什麼會使你的註冊表具有獨特性? –

+0

確實有ID是唯一的,我檢查的是其他列需要更多時間。 –

0

我不知道究竟是如何工作的算法,但一般:

for(int i = 0, j = 0; i < N; ++i; ++j) { 
    if (i==j) { 
     /* do something */ 
    } 
} 

這有複雜度爲O(N)

for(int i = 0, j = 0; i < N; ++i; ++j) { 
    if (i==j && i!=k) { 
     /* do something */ 
    } 
} 

另外這款具有複雜度爲O(N)

最終,點1和點2具有相同的複雜性。