当前位置:  开发笔记 > 数据库 > 正文

SQLite - 获取数据库中的行数

如何解决《SQLite-获取数据库中的行数》经验,为你挑选了3个好方法。

我希望在我的表中使用多行max(id).当它返回时NULL- 如果表中没有行 - 我想返回0.当有行时我想返回max(id) + 1.

我的行从0开始编号并自动增加.

这是我的发言:

SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words

但它总是让我回归0.我做错了什么?



1> VolkerK..:

您可以使用查询实际行数

SELECT Count(*) FROM tblName
请参阅https://www.w3schools.com/sql/sql_count_avg_sum.asp


这确实会一直有效,但它需要sqlite来枚举表中的所有行.如果行数很大(比如说> 10,000)那么效率很低
任何方式得到这个不计算?喜欢SQLite维护的一些元数据?我正在查看一个300GB的SQLite数据库文件,我需要从...获取信息... COUNT需要30米才能运行.
因此,与使用在create table模式中声明的字段相比,使用tblName;中的select count(rowid)获得更快的访问速度和表中行的==更有效。

2> Steve Weet..:

如果你想使用MAX(id)而不是count,在阅读了Pax的注释后,下面的SQL将为你提供你想要的

SELECT COALESCE(MAX(id)+1, 0) FROM words


聪明但只有你有一个基数为0的auto int pk才有效.VolkerK的答案更简单,更有效.
@丰富.VolkerK的答案确实比较简单,并且是我自己的解决方案,然而,问题表明OP想要使用max(id)并且行从0开始编号并自动增加.

3> paxdiablo..:

在SQL中,NULL = NULL为false,您通常必须使用IS NULL:

SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words

但是,如果你想要行数,你应该使用,count(id)因为你的解决方案将给出10,如果你的行是(0,1,3,5,9)它应该给5.

如果你可以保证你总是从0到N的id,那么max(id)+1 可能会更快,具体取决于索引实现(遍历平衡树的右侧而不是遍历整个树可能会更快,计数.

但这是特定于实现的,我建议不要依赖它,尤其是因为它将您的性能锁定到特定的DBMS.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有