gpt4 book ai didi

php - 查询性能大于主键

转载 作者:行者123 更新时间:2023-11-29 13:43:33 25 4
gpt4 key购买 nike

我有一个报告表,用于存储描述

tableA

sno | Project |name | description | mins |
1 | prjA |nameA |ABC -10% task done| 30 |
...
3000 | prjA |nameB |ABC -70% task done| 70 |

我想查询描述字段并保存在另一个表中

tableB

id | valueStr | total_mins | last_sno
1 | ABC | 100 | 3000

如果第二个表中没有条目,我将创建一个具有默认值的条目

如果第二个表中有条目,我会更新第二个表,使用total_mins并将last_sno增加到该值(例如3300),以便下次查询此表时我从第二个表中获取值并基于last_sno

查询

SELCT last_sno FROM tableB where valueStr ='ABC'

the first 3 characters in the description field

SELECT max(sno), sum(mins) FROM tableA
where sno > last_sno and description like 'ABC%'

由于第一个表有数百万行,所以,我使用 sno > last_sno 搜索第一个表,这样应该有助于性能,对吗?

但解释显示,当我从第一个 sno 查询第一个表时,它扫描相同的行数

最佳答案

索引的使用可能对你没有帮助,因为MySQL仍然要从last_sno开始扫描索引到数据末尾。您最好在 TableA(description) 上建立索引,因为这样的索引可用于像“ABC%”这样的描述

事实上,在这种情况下索引可能会伤害您。索引不是按顺序读取表中的页面,而是随机读取它们——效率较低。

编辑:(太长,无法发表评论)

尝试使用忽略索引提示运行查询,看看是否可以在没有它的情况下运行查询。该指数实际上可能使情况变得更糟。

但是,“真正的”解决方案是将您感兴趣的前缀存储为单独的列。然后,您可以在此列上添加索引,并且查询应该使用基本 SQL 高效运行。您不必花时间尝试优化一个简单的流程,因为数据将被正确存储。

关于php - 查询性能大于主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761464/

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