为什么WHERE index = ?
的运行速度比WHERE prop_link = ?
想象一下下表:
姓名:地址
列:idx(INTEGER PRIMARY KEY),full_street(TEXT),prop_link(TEXT)
长度:1亿行
现在想象以下两行代码。
cursor.execute("UPDATE addresses SET full_street = ? WHERE prop_link = ?", (street_var, property_link_var))
cursor.execute("UPDATE addresses SET full_street = ? WHERE idx = ?", (street_var, idx_var))
过去几天我不得不经常处理这张桌子。
有几天我被困了,因为我的代码冻结在' WHERE prop_link =?'排队甚至等了一个小时,它不会解冻,我也无法弄清楚原因。
当我尝试使用' WHERE idx =?'令人惊讶的是,我的代码开始在几分之一毫秒内完成。
为什么?我查看了https://sqlite.org/queryplanner.html和https://sqlite.org/optoverview.html以及https://docs.python.org/3/library/sqlite3.html#connection-objects,也许我错过了,但我无法找到为什么加速如此激烈。
我的猜测是某种类型的哈希映射或二进制搜索,但我希望能够更好地理解它,以便我可以编写高性能代码(1亿行)。