2017-06-17 66 views
-1

,我要在這個形式的塊磁鐵的拉力與三個dimentions在Excel表中的數據:加快SQL SELECT與只是數字表

a/mm | b/mm | c/mm | force/N 
--------------------------------- 
1 | 1 | 1 | 0.11 
1 | 1 | 2 | 0.19 
1 | 1 | 3 | 0.26 
      ... 
100 | 80 | 59 | 7425 
100 | 80 | 60 | 7542 

diagram showing what a, b and c mean

每塊磁鐵有一排,a,b和c以毫米爲整數,a的範圍爲1-100,b爲1-80,c爲1-60。所以總共有100 * 80 * 60 = 480,000行。 我想製作一個在線計算器,您可以在其中輸入a,b和c,併爲您提供力量。爲此,我想要使用類似這樣的查詢:

SELECT FROM blocks WHERE a=$a AND b=$b AND c=$c LIMIT 1 

我想使此查詢儘可能快。我想知道我可以採取什麼措施來優化此搜索。我應該如何安排SQL表中的數據?我應該保持表格的結構與我的Excel表格相同嗎?我應該保持行的順序嗎?我應該使用哪些索引?我應該添加一個唯一的ID列到表中?我願意提出任何建議來加速這項工作。

需要注意的是:

  • 的數據已經很好地被排序,b和c
  • 表已經包含了所有的數據,並沒有什麼人會做它只是顯示它,所以我們不要「T擔心UPDATE的速度查詢
  • a和b是可以互換的,這樣我就可以刪除所有的行,其中b> A
  • 增加A,b或C總是會導致更大的牽引力
  • 我暈這個計算器是網站的一部分。我使用PHP和MySQL。
  • 如果可能的話,儘量減少存儲表所需的內存也是可取的,速度是優先級
  • 請不要建議涉及使用公式而不是我的數據表的答案。這是一個要求,即數據從數據庫中提取,而不是計算

最後,您可以estimeate:

  • 這樣選擇查詢需要多長時間有和沒有優化?
  • 這樣的表格需要多少內存?

回答

1

我會創建你的表使用a,b,c作爲主鍵(因爲我假設每一個三元組a,b,c將不會有一個記錄)。

將採取此選擇的時間將取決於您使用的rdbms,但與主鍵應該是非常快。您預計每分鐘有多少個查詢高峯?

+0

一共不多,最多三分鐘。 – mrk1357

+0

因此,您將不會有任何性能問題試圖訪問表。 –

1

如果您想盡可能快地創建應用程序,請將數據存儲在文件中,並將其載入內存到應用程序或應用程序服務器(您的整體架構不清楚)。無論您用於開發應用程序的語言是否支持哈希表查找數據結構。

在數據庫中存儲數據有很好的理由:事務完整性,安全機制,備份/恢復功能,複製,複雜查詢等等。您的問題實際上並不意味着需要任何數據庫功能。你只需要一個固定的數據集查找表。

如果您確實想將數據存儲在數據庫中,請按照上述步驟操作。也就是說,將其加載到內存中供用戶查詢。

如果您有一些要求使用數據庫(比如數據發生變化),請遵循我的USeptim建議版本:創建一個包含全部四列作爲主鍵的表(或者在所有四個列上使用二級索引列)。數據庫然後會做類似於第一個解決方案的事情。不同之處在於數據庫將(通常)使用b-tree來搜索數據而不是散列函數。

+0

我希望這個計算器成爲網站的一部分。我在這個問題上加了這個。我使用PHP和MySQL。你還會推薦使用數據庫以外的東西嗎? – mrk1357