Python执行SQL时cursor.fetchall()查询速度过慢问题求助
优化该SQL查询性能的方案
给查询字段添加复合索引
你的查询条件依赖dataIndex和Block两个字段,如果表上没有针对这两个字段的复合索引,数据库会执行全表扫描——哪怕最终结果只有1-5条,遍历整个表的开销也会让查询变慢。直接执行下面的SQL创建索引:CREATE INDEX idx_blockperiods_dataindex_block ON blockPeriodsTable(dataIndex, Block);索引创建完成后,数据库能快速定位到符合条件的记录,不用扫描全表,查询速度会显著提升。
替换为参数化查询
当前用f-string拼接SQL的写法,不仅存在严重的SQL注入风险,还会导致数据库无法复用执行计划:每次num值变化,数据库都要重新解析、编译SQL语句,这会增加额外的性能损耗。改成参数化查询(适配Python标准DBAPI):cursor.execute("SELECT Subject, Code FROM blockPeriodsTable WHERE dataIndex=%s AND Block='A'", (num,)) blockPeriodsTemp = cursor.fetchall()参数化查询能让数据库缓存执行计划,重复执行同类查询时直接复用,减少SQL解析的时间开销。
用EXPLAIN分析查询执行计划
执行EXPLAIN语句检查查询是否真的用到了索引:EXPLAIN SELECT Subject, Code FROM blockPeriodsTable WHERE dataIndex={num} AND Block='A';查看输出结果中的
type列:如果是ALL,说明还是全表扫描,需要检查索引是否正确创建或生效;如果是ref或range,则表示索引在正常工作。验证数据库缓存影响
如果第一次查询慢、后续查询变快,可能是数据库还没缓存该查询的结果。可以多执行几次查询观察耗时变化,如果始终耗时较高,那核心问题还是索引缺失或SQL写法不当。
内容的提问来源于stack exchange,提问作者DarkKnight1203
相关产品推荐
相关产品推荐

