gpt4 book ai didi

php - 数据表js和查询数php mysql

转载 作者:行者123 更新时间:2023-12-01 13:14:52 25 4
gpt4 key购买 nike

提前计划“sql_calc_found_rows”已贬值并使用新的数据表1.10.18我有一个问题。对于服务器端处理,您需要反馈总数和过滤后的总数。因此,根据我的收集,对于每个请求,我都必须运行3个单独的查询,这似乎过多了,但我想不出办法如何获取信息。

// Grab the data with page offset
// for "data"
$query1 = 'SELECT .. FROM .. WHERE .. LIMIT ..'

// Grab filtered total which is the total using the "WHERE" without the "LIMIT"
// for "recordsFiltered"
$query2 = 'SELECT COUNT FROM .. WHERE .. '

// Grab the total records without the WHERE
// for "recordsTotal"
$query3 = 'SELECT COUNT FROM ..'

具有复杂的查询和半大型数据集(100k-2mill)的记录,并且每当有人在搜索中键入字母(键入单词时每个字母)或按列排序和更改页面的时间和数量时,就会触发此事实查询/执行似乎很疯狂。

我是否丢失了任何东西?或者这仅仅是使用数据表所需的内容,而每个表必须触发3个数据库查询?谢谢。

最佳答案

我已经广泛使用了数据表(例如,在计费数据库中浏览1000万条记录),很正确,需要3个查询,而无需进行任何优化即可获得所需的结果。如果绝对需要查询超过一千万个结果,那么您将要看一下DB分片,因为在记录一百万条记录之后,诸如DB I / O之类的事情开始发挥重要作用。

但是,使用一些技巧,您可以在多达100万条记录的大型数据集上获得可接受的UX,这些记录可以立即做出响应。因此,策略是操纵数据库并草拟查询,这样您就不必每次都考虑整个记录集。如果有动画反馈(Datatables具有此反馈)并且用户获得的结果始终是期望的结果,则用户总是愿意等待几秒钟,特别是如果每​​次搜索仅返回一致的数百万条记录中的几条记录时。少即是多,这就是我们的目标。

以下是我尝试过的一些效果很好的方法:

  • 如果您有那么多数据,那么每次执行COUNT都会返回一个精确的数字-是否每个请求都必须精确?最终用户是否需要查看报告的确切记录2,000,001,还是仅接受“+200万”?如果是这样,您可以缓存总数并以较低的频率更新它吗?您只需要该数字即可返回确切的总数,除非您分页到最后,否则数据表实际上不会使用它。您可以将数据表配置为不报告确切的总数,因此只需给它们一个估计值即可。但是,您将始终需要用于分页的已过滤数字-但现在您只需要2个查询,而不是每次3个查询。
  • 如此庞大的数据集往往是只读的,并且随着时间的推移会像销售记录一样随时间增加。您是否可以为其添加自定义数据库索引(例如,使用日期按年份进行过滤),并确保您的WHERE子句除了实际使用的是Datatables搜索请求之外,还首先使用此检查?请注意,Datatables允许您在每个AJAX请求客户端添加自定义参数,因此您可以使用外部选择器(例如带有年份的组合框,默认为当前年份)来帮助您在索引有用的查询表达式中更早地过滤结果。
  • 仅对某些列单独使用专用输入搜索字段并专门应用它们,而不是使用一个通用输入字段来对每一列使用搜索条件,以符合以下条件:where field_name LIKE'search input *'。 Datatables支持每列过滤器,但是我也看到了一些服务器端实现,所有列都有一个搜索输入,它们也可以在大型数据集上使用。无论如何,并非总是需要搜索所有列。
  • 您一次不会返回对最终用户有意义的数百个结果-使用LIMIT子句,一次最多只能返回1000个结果,并且如果此限制限制了用户抱怨输入更好的搜索条件被超过。数据表可以请求很多,但是您的服务器不必遵循它。
  • 索引可以提高性能,但是要权衡的是它们会使用更多的空间。为用户常用的查询设置特定的索引。
  • 考虑添加一个JavaScript超时,以“消除”搜索输入,该超时仅在用户在一段时间(例如1秒)后停止键入后才提交搜索请求。
  • 我已将BLOB和静态文本数据从数据库移到磁盘文件或Mongo等NOSQL替代文件中,并确保这两种实现的主键都匹配。您会发现使用的任何数据库绝对可以更快地处理,包括执行备份(我确定可以做到)。

  • 您的里程可能会有所不同,但是您可以说有很多工作可以提高性能-只是不要尝试一次查询绝对的所有内容。没有人会关心庞大数据集的确切数量,如果他们这样做了,那么他们真正想要的是一份报告,这是一个不涉及数据表的不同用例。

    关于php - 数据表js和查询数php mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139401/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com