有一张表格从在线服务中填充并每周更新。
这在一个单独的(第二个)数据库上进行。
该表的大小约为 300MB(150 万行),由每周下载 CSV 数据的 cron 处理。此 CSV 文件大小为 3GB(400 万行),其中的行和列被过滤以仅保留数据的子集。列的顺序可能会改变。过去有。所以我们甚至无法根据第一行进行预测。甚至行标题名称也可能会更改。
所以它是一个完全转储,并按一些硬设置的行名称进行过滤。
在我的 Django 视图中,它是一个 DRF 驱动的视图,我的 API URL 需要 3 秒 (0:00:03.263031) 来执行。
SELECT DISTINCT `Region` AS `Region`
FROM `my-table-name`
WHERE `flag` = 'condition'
LIMIT 0, 100
问题是,如果它只是我在页面上获取的这个端点,它就不会终止。但是当用户点击 INPUT 元素时,单个页面上有许多端点被获取。每次触发 3 秒太长了。
我还能做些什么来优化表/查询?
您可以尝试添加一个涵盖查询的索引,如下所示:
该索引以
Flag
列开头,因为它是您的子句中的谓词WHERE
。然后它跟在该Region
字段之后,以便它也包含在内,因为您正在SELECT
访问该字段。