2017-06-17 65 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