在获取随机行sqlite3时减少查询时间

时间:2013-10-15 06:19:14

标签: sql sqlite android-sqlite

在Android中,我在sqlite数据库中拥有超过90,000条记录,因为我想获取4个不同的随机行,但是需要花费很多时间才能帮助我如何缩短时间因为它需要更多时间在我的手机上用了5到6秒

查询在

之下
   select * from Employee RANDOM LIMIT 4

1 个答案:

答案 0 :(得分:1)

首先,您的查询实际上不会获取随机行,它会获取前四行,因为它被解释为这样,即“RANDOM”用作表别名:

select * from Employee as RANDOM LIMIT 4

要随机重新排序,您必须使用ORDER BY RANDOM(),如下所示:

SELECT * FROM Employee ORDER BY RANDOM() LIMIT 4

但是,这效率不高(如您所见),因为无法对其进行优化,因为RANDOM()的返回值无法预测。


要更快地获取随机的员工记录,您需要

  1. 某个整数ID列(我们假设您将其称为_id)和
  2. 该列的索引(这是PRIMARY KEY列自动完成的。)
  3. 要获得四个随机记录,首先从数据库中获取最大的_id值:

    SELECT MAX(_id) FROM Employee
    

    然后在代码中生成1和该值之间的四个随机整数,并执行此快速查询:

    SELECT * FROM Employee WHERE _id IN (?,?,?,?)
    

    如果可以删除员工,则表中可能存在某些_id值。 在这种情况下,您必须创建一个新的随机数,然后再次尝试另一条记录。