2013-03-17 52 views
0

我的數據庫是這樣的:如何使此查詢更快?

id | Column1 | Column2 

必然選擇已知的事實:ID是不是主唯一的ID(但可能是)。 id可以高達2百萬以上。列值都充滿了TINYINT

var query : String = "SELECT Column1 FROM Table1 WHERE Column1 <> 0"; 
dbcmd = dbcon.CreateCommand(); 
dbcmd.CommandText = query; 
reader = dbcmd.ExecuteReader(); 
var result : int = 0; 
while(reader.Read()) { 
    result++; 
} 
return result; 

但彌補了它5秒一個基本的搜索,反正是有,使其更快?

編輯:像往常一樣,感謝貢獻者和快速性!

+7

你_sure_這是JavaScript不是,比方說ActionScript或打字稿? – 2013-03-17 16:47:13

+0

這是UnityScript,真的類似的Javascript(http://wiki.unity3d.com/index.php?title=UnityScript_versus_JavaScript) – user1375812 2013-03-17 16:49:04

+2

我重新標記它作爲UnityScript,而UnityScript和JavaScript是非常相似的,它們實際上是不同的語言 – 2013-03-17 16:50:12

回答

2

這看起來並不像javascript代碼,但你可以嘗試計數的記錄,而不是執行查詢,然後在客戶端通過整個結果集循環,並增加一個變量:

var query : String = "SELECT Count(Column1) FROM Table1 WHERE Column1 <> 0"; 

這將是比代碼快得多,因爲計數操作將直接由數據庫服務器完成。

+0

謝謝!還有其他建議嗎? – user1375812 2013-03-17 16:53:26

+1

不,那您也許希望從這個操作,以獲得最佳的性能。 「COUNT」SQL函數的設計完全是爲了這個目的:計數符合數據庫中某些條件的記錄數。其他解決方案將是完全浪費資源。 – 2013-03-17 16:54:00

+0

太棒了,我會試試! – user1375812 2013-03-17 17:02:37

7

是的,你正在閱讀的結果並處理它們一個接一個。所有你似乎在做需要的是計數,你可以得到:

"SELECT COUNT(*) FROM Table1 WHERE Column1 <> 0"; 
+0

謝謝!還有其他建議嗎? – user1375812 2013-03-17 16:52:48

0

是,指數在列1表,在where子句中使用的列。

+0

我該怎麼做? – user1375812 2013-03-17 16:52:20

+0

第1列是唯一的嗎?你是否已經爲表格定義了主索引? – suspectus 2013-03-17 16:53:38

+0

'CREATE UNIQUE INDEX col1_index_name ON表1(列1);'' – suspectus 2013-03-17 16:54:41