PHP数组效率与mySQL查询

PHP数组效率与mySQL查询,php,javascript,mysql,Php,Javascript,Mysql,我有一个MySQL表,大约有9.5K行,这些行不会有太大变化,但我可能会慢慢添加到它们中 我有一个过程,如果有人扫描条形码,我必须检查该条形码是否与此表中的值匹配。实现这一目标的最快方法是什么?我必须指出,这些价值观没有模式 这里有一些想法 Ajax调用PHP文件查询MySQL表(我认为这是最慢的) 登录时将此MySQL表加载到数组中。然后在扫描Ajax时调用PHP文件检查数组 登录时将此表加载到数组中。查看扫描页面时,以某种方式将该数组加载到JavaScript数组中,并使用JavaScrip

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

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

这里有一些想法

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

  • 使用索引良好的MySQL表要快得多,然后通过数组查找某些内容


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

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

    最好在需要时为表编制索引并执行ajax调用


    祝你好运

    老实说,我从来不会为了任何事把整张桌子都装进去。我所要做的就是向PHP网关发出AJAX请求,然后该网关查询数据库,并返回结果(或不返回结果)。它可以非常快(因为它只取决于延迟),并且可以大量缓存结果(通过或类似的方式)


    确实没有理由加载整个数组进行“验证”…

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

    因此,一般来说,我建议在服务器端运行值验证。AJAX是非常容易做到这一点的正确技术

    加载所有9.5k行只找到一个特定的行,这肯定是浪费资源。对单个值运行选择查询

    在客户端/AJAX上公开PHP功能

    看看,它允许在客户端将整个PHP类或单个方法作为AJAX方法公开。此外,xajax在客户机和服务器之间交换参数时提供帮助

    要搜索的索引属性

    请确保保存条形码值的列为。如果验证过程往往很慢,请注意

    避免表格扫描

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

    最后:安全

    不要忘记,传输到客户端的任何数据都可能暴露敏感数据。虽然客户端浏览器可能无法呈现9.5 K行,但这些行确实存在于生成的HTML页面中。使用Show source,任何用户都可以计算出所有有效数字

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


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

    它只用于验证。如果它进行了验证,那么我将插入到另一个MySQL表中。我理解不这样做的一些原因,但这是一个奇怪的场景。此过程在本地设置上使用,我们可以在其中控制使用该设置的浏览器和社区it@Robert如果不将数据发送到服务器,则客户端验证是有意义的。此外,如果您计划仅在本地使用数据,则本地阵列可能是一个更快的解决方案。最好进行基准测试。但是有了好的索引,我希望每次查询都会最快。在任何情况下,您都在练习过早优化。这不太可能是一个限速步骤。我有一个jQuery/PHP/MySQL自动完成功能,它针对一个~100K的表,速度非常快。一般来说,您不应该将内容缓存在PHP会话变量中,因为这些变量会在每次请求时写入磁盘。