我有一个小问题,一个项目,mysql和PHP的一些后期添加。
我们在mysql中有一个表,有200000行,每个行都有一个指定的类别最初,select语句只是根据where子句和按索引id排序来提取所需的项。非常快。
但是,我们有一些用户要求能够给每个类别赋予权重(即财务=60%,信贷=25%,保险=15%),并允许勾选框随着时间的推移降低结果,这意味着select语句现在必须为where子句返回的每个结果计算一个值(category*weighting),并且如果复选框已启用(category*weighting*1/days old)。然后它必须按这个计算值排序。您可以想象,每个查询的速度都很慢(大约10秒)。
现在,我不确定在这里进行的最佳方式是,我不知道如何有一个表来保存这些计算值用于索引(因为用户可以选择任何变体)。
如果您尝试简化排序(按权重排序,日期排序),也会出现问题,因为这明显不同于(按日期排序权重排序)80%*cat*1/8days=0.1和20%*cat*1/1day=0.2,前者更高,但在第一次排序中不会出现更高的值。
我可以完全访问数据库和代码有人对如何在不影响性能的情况下实现这种实用性有什么建议吗?
干杯
最佳答案
从您的描述来看,每个查询的每一行的排序条件可能不同您唯一的选择可能是向数据库抛出更多硬件,或使用其他数据库。
编辑:如果数据集不经常更新,您可以识别常用的参数集和预计算索引。
关于php - Mysql按计算值排序-用户定义的类别权重,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1512209/