这是检查表中是否存在行的最佳(最有效)方法吗?
SELECT EXISTS(SELECT 1 FROM myTbl WHERE u_tag="tag");
// Table is...
// CREATE TABLE myTbl(id INT PRIMARY KEY, u_tag TEXT);
Run Code Online (Sandbox Code Playgroud)
还有什么是返回值,是假(bool)还是0(int)还是NULL?
Tom*_*err 80
虽然文档并不暗示它,但显然主要的sqlite dev(Richard Hipp)已经在邮件列表中确认EXISTS了你的短路.
SQLite中的查询规划器虽然并不精彩,但它足够聪明,只要它看到EXISTS()内部查询的第一行就可以停止并返回true.
因此,您提出的查询将是最有效的:
SELECT EXISTS(SELECT 1 FROM myTbl WHERE u_tag="tag");
Run Code Online (Sandbox Code Playgroud)
如果您对可移植性感到紧张,可以添加限制.我怀疑大多数DB会为你提供相同的短路.
SELECT EXISTS(SELECT 1 FROM myTbl WHERE u_tag="tag" LIMIT 1);
Run Code Online (Sandbox Code Playgroud)
如果您不需要记录中的某些内容,则选择1是可接受的做法,尽管您选择的内容无论哪种方式都不重要.
在您的标记字段上添加索引.如果不这样做,查询不存在的标记将执行全表扫描.
EXISTS 声明它将返回1或0,而不是null.
| 归档时间: |
|
| 查看次数: |
68302 次 |
| 最近记录: |