PHP数组效率与mySQL查询

时间:2012-12-20 16:59:55

标签: php javascript mysql

我有一个大约9.5K行的MySQL表,这些不会有太大变化,但我可能会慢慢添加它们。

我有一个过程,如果有人扫描条形码,我必须检查该条形码是否与此表中的值匹配。实现这一目标的最快方法是什么?我必须提到这些价值观没有模式

这里有一些想法

  1. Ajax调用PHP文件来查询MySQL表(我想这会是最慢的)
  2. 在登录时将此MySQL表加载到一个数组中。然后在扫描Ajax时调用PHP文件来检查数组
  3. 在登录时将此表加载到数组中。查看扫描页面时,以某种方式将该数组加载到JavaScript数组中并使用JavaScript进行检查。 (这在我看来是最快的,因为它消除了Ajax调用和MySQL查询。分成更小的数组是否有效,所以我不会落后于服务器和浏览器?)

4 个答案:

答案 0 :(得分:6)

老实说,我从来没有为任何事情装载整张桌子。我所做的就是将一个AJAX请求发回PHP网关,然后查询数据库,并返回结果(或什么都没有)。它可以非常快(因为它只取决于延迟)并且您可以大量缓存该结果(通过memcached或类似的东西)。

没有理由为“验证”加载整个数组...

答案 1 :(得分:2)

使用良好索引的 MySQL表格要快得多,然后查看数组中的内容。

但最终这一切都取决于你真正想要对数据做些什么。

答案 2 :(得分:2)

正如您所提到的,您的表包含大约9.5K的数据。在登录或扫描页面上加载数据没有逻辑。

最好为您的表编制索引,并在需要时进行ajax调用。

最好的运气!!

答案 3 :(得分:0)

虽然9.5 K行不是那么多,但相关的数据量需要一些时间来传输。

因此 - 一般而言 - 我建议在服务器端运行值验证。 AJAX是非常容易实现这一目标的正确技术。

仅加载所有9.5 K行以查找一个特定行,绝对是浪费资源。对单个值运行 SELECT-query

在客户端/ AJAX公开PHP功能

查看xajax project,它允许在客户端公开整个PHP类或单个方法作为AJAX方法。此外,xajax有助于在客户端和服务器之间交换参数。

索引要搜索的属性

请确保包含条形码值的列为indexed 。如果验证过程趋于缓慢,请留意MySQL table scans

避免表格扫描

要避免表扫描并保持查询快速运行,请使用固定大小的字段。例如。除了其他类型之外,VARCHAR()会使查询变慢,因为行不再具有固定大小。没有固定大小的表有效地阻止数据库轻松预测结果集的下一行的位置。 因此,例如, CHAR(20)代替VARCHAR()。

最后:安全!

不要忘记,传输到客户端的任何数据都可能会泄露敏感数据。虽然您的9.5 K行可能无法由客户端的浏览器呈现,但行生成的HTML页面中确实存在这些行。使用显示来源任何用户都可以找出所有有效数字

在项目上下文中公开有效的条形码值可能是也可能不是安全问题。

PS:虽然与您的问题无关,但我建议您使用PHPexcel来阅读或编写电子表格数据。除了其他解决方案,例如基于PEAR的框架,PHPExcel完全不依赖。