当我知道主键时,检查记录是否存在的最快方法是什么? select
,count
,filter
,where
或其他什么?
答案 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()