检查记录是否存在的最快方法

时间:2017-01-20 22:05:20

标签: python sqlite python-3.x peewee

当我知道主键时,检查记录是否存在的最快方法是什么? selectcountfilterwhere或其他什么?

2 个答案:

答案 0 :(得分:1)

您可以通过EXPLAIN QUERY PLAN查看自己,这会告诉您费用和费用。它打算为特定查询做些什么。

成本并不直接比较运行,但你应该对是否存在重大差异有充分的认识。

话虽如此,我希望COUNT(id) FROM table WHERE table.id="KEY"可能是理想的,因为它将利用任何部分查找能力(特别是在columnar databases如亚马逊的红移)和主键索引。 / p>

答案 1 :(得分:1)

当您使用count时,即使数据库找到了记录,数据库也必须继续搜索,因为可能存在第二个记录。 因此,您应该搜索实际记录,并告诉数据库在第一个记录之后停止。

当您要求从记录中返回数据时,数据库必须从表中读取该数据。但是如果通过在索引中查找ID可以找到记录,则该表访问将是多余的。 因此,您应该只返回您用于搜索的ID:

SELECT id FROM MyTable WHERE id = ? LIMIT 1;

无论如何,当您使用EXISTS时,不会读取实际数据和限制,这在peewee中更简单:

SELECT EXISTS (SELECT * FROM MyTable WHERE id = ?);
MyTable.select().where(MyTable.id == x).exists()