我对项目,mysql和PHP的一些后期添加有一个小问题。
我们在mysql中有一个包含200,000行的表,每行都有一个指定的类别。最初,select语句只是根据where子句拉出所需的项目,并按索引的id排序。很快。
但是我们有一些用户要求能够为每个类别赋予权重(即财务= 60%,信用= 25%,保险= 15%)并启用复选框以随时间降低结果,这意味着选择语句现在必须计算一个值(类别*加权)以及是否为where子句返回的每个结果启用了复选框(类别*加权* 1 /天)。然后必须按此计算值排序。你可以想象每个查询都很慢(~10秒)。
现在我不确定这里最好的方法是什么,因为我不确定如何有一个表格来保存索引的这些计算值(因为用户可以选择任何变体)。
如果您尝试简化排序(按权重排序,日期),也会出现问题,因为这显然与(按日期加权排序)不同,为80%* cat * 1 / 8days = 0.1和20%* cat * 1 / 1day = 0.2这是更高但在第一种情况下不会出现更高。
我可以完全访问数据库和代码。有没有人对如何在不消除性能的情况下实现这种实用性有任何建议?
干杯全部
答案 0 :(得分:0)
根据您的描述,似乎每个查询的每一行的排序条件可能不同。您唯一的选择可能是在数据库中投入更多硬件,或使用其他数据库。
编辑:如果数据集没有经常更新,您可能能够识别常用的参数集和预计算索引。