快速查询SQLite中的行数
我在一个Sqlite数据库里有一张表,里面有很多行。我想知道这张表里总共有多少行。
我试过用 select count(*) from table
,但是这个方法会逐行访问,速度非常慢。
我还试过 select max(rowid) from table
。这个方法快,但不太安全——因为ID可能会被重复使用,表也可能是空的等等。这算是一种变通的方法。
有没有什么办法可以快速而干净地找到表的大小呢?
我使用的是Python 2.5的sqlite3版本2.3.2,搭载的Sqlite引擎是3.4.0。
3 个回答
0
为了跟进Thilo的回答,我想分享一个数据点。我有一个包含230万行的sqlite表格。使用 select count(*) from table
来计算行数时,花了超过3秒钟。我还尝试了 SELECT rowid FROM table
,因为我认为rowid是默认的主键索引,但速度也没有更快。然后,我在数据库的一个字段上创建了索引(随便选了一个字段,但我选择了一个整数字段,因为我之前的经验告诉我,短字段的索引通常会很快,我想是因为索引里存储了值的副本)。使用 SELECT my_short_field FROM table
后,查询时间降到了不到一秒。
1
获取一个表格行数的另一种方法是使用触发器,这个触发器会把实际的行数存储到另一个表中(每当插入一条记录时,计数器就会加一)。这样,虽然插入新记录的速度会稍微慢一点,但你可以立即知道行数是多少。
1
你有没有在一个不允许为空的列上建立索引,比如主键?如果有的话,系统可以通过这个索引来快速查找数据(希望这样不会花太多时间)。如果没有的话,那就只能逐行检查整个表来计算所有的行数了。