2011-05-06 82 views
0

我有一個關於數字和數字立方體的2行表。目前,我已經插入了大約1300萬個號碼,而且這個數字非常迅速地增長。簡單的MySQL輸出問題

有沒有比使用像SELECT * FROM table這樣的命令更快速地輸出簡單表格的方法?


我的第二個問題與選擇一系列數字有關。如上所述,我有一個龐大的數據庫,可以非常快地保存數字和它們的立方體。如果你想知道,我試圖找到3個數字,當立方時總計爲33。所以,我通過使用服務器/客戶端程序向客戶端發送一系列數字來完成此操作,以便他們可以在所述數字範圍內執行公式。

舉例來說,假設第一個客戶端發出鈴聲,我給他一個0,100的範圍。他比計算數字並報告服務器是否發現了三元組。如果他不這樣做,環路就會繼續。

當客戶端自己對數字進行計算時,速度非常慢。所以,我決定使用數據庫來存儲立方體數字,這樣客戶端就不必進行計算。問題是,我不知道如何只訪問一系列數字。例如,如果客戶端的範圍是0-100,則需要訪問0-100中所有數字的多維數據集。

什麼是將返回一個數字範圍的選擇命令?


我用於表格的引擎是MyISAM。

+3

'不建議使用SELECT *',因爲查詢可能會基於數據類型(IE:BLOB)滯後。只選擇你需要的東西 – 2011-05-06 22:19:43

+0

閱讀關於'LIMIT'和'OFFSET':http://stackoverflow.com/search?q = mysql +限制 – 2011-05-06 22:25:22

+0

@ypercube工作!如果您將其作爲答案發布,我會接受它。 – 2011-05-06 22:30:13

回答

2

如果表「MYTABLE」有兩列

number  cube 
    0   0 
    1   1 
    2   8 
    3   27 

查詢命令將(假設範圍的起點爲100,終點爲200):

select number, cube from mytable where number between 100 and 200 order by number; 

如果您希望此查詢儘可能快,請確保以下內容:

  • number是索引。因此,您不需要執行表掃描即可查找範圍的開始。
  • 您創建的索引被聚集。聚簇索引是 掃描像這樣更快作爲索引的葉是該記錄(作爲比較,在一個 非聚集索引的葉是指向記錄其可以是的一個完全不同的
    部分磁盤)。同樣,聚簇索引 在 數據上強制排序結構。因此,您可能能夠從一個塊中讀取所有100 記錄。

當然,添加一個索引會使寫入表的速度稍慢。同樣,我假設你正在按順序寫入表格(即0,1,2,3,4等等不是10,5,100,3等)。如果以隨機順序寫入表中,寫入具有聚簇索引的表非常慢(因爲數據庫必須保持移動記錄以適應新表)。

+0

非常感謝您的回答,但是我有一些問題,因爲我是MySQL noob。首先,通過索引,我認爲你的意思是一個關鍵?我將數字列n設置爲表格的主鍵。我相信這是指數,但如果我錯了,請糾正我。其次,我如何創建一個集羣數據庫? – 2011-05-06 22:46:00

+0

+1不錯。你可以添加一個case,當數字是浮動的而不是按順序的(增加一個索引並在索引中使用'between-where'或者使用'limit-offset')。 – 2011-05-06 22:48:46

+1

@Matt;如果您的表使用InnoDB引擎(檢查表定義),那麼主鍵默認爲集羣。 – 2011-05-06 22:50:44