程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQLite select语句优化建议大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决sqlite SELEct语句优化建议?

开发过程中遇到sqlite SELEct语句优化建议的问题如何解决?下面主要结合日常开发的经验,给出你关于sqlite SELEct语句优化建议的解决方法建议,希望对你解决sqlite SELEct语句优化建议有所启发或帮助;

我在这里与neurino在一起。您还没有说过为什么需要将随机选择的四个名称放在一行中,以及为什么必须在后端进行。

如果您担心性能,请在客户端中生成随机整数(范围> = min(pkcol)和<= max(pkcol)),直到找到四个不同的行(即实体/名称)。生成的ID之一可能不存在任何行,但是只需几毫秒即可找到。采用这种随机密钥方法,您可以避免排序。即使对于具有数十亿行的表,该方法也将快速起作用。

PS(发现它是一个iPhone应用程序之后),您需要调用一次以获取最小和最大ID值(它是PK,因此使用了索引)。然后,您至少需要再次调用数据库(再次,使用索引辅助),以使用您随机生成的PK值来获得四个不同的行[其中(a,b,c,d)中的ID]最大调用数是未知的; 多少取决于主键序列的密度。我不认为这将是过多的I / O,并且与Random()的命令相比,它的资源占用将大大减少- 尤其是在表中有很多行的情况下。您总是可以随机生成一个ID列表其中包含8、12、16个ID,并且如果返回的行数多于4,则让客户端只选择所需的4行。

PPS通常,数据库连接的实例化非常昂贵,并且您不希望循环执行此操作,也不想执行比所需次数更多的操作。但是您可以打开一个连接,运行两个或三个有效的选择,每个选择返回几行,然后在完成当前任务后关闭。

解决方法

我有一个结构的sqlite表“ Details”:

ID  Name    Category   
---------------------
1   Matt    0 
2   Shervin 0 
3   Bob     0   
4   Lee     0 
5   Rick    0   
6   Suraya  0 
7   Susan   0   
8   Adam    0   
9   Jon     1   
10  Lorna   1 
... and so on .......

我想随机选择一行,然后从三个不同的行中选择三个名称(同样最好随机选择)。我希望所有这些都可以从一个sqlite语句返回。例如

ID  Name  Category  Name1  Name2  Name 3  
----------------------------------------
3   Bob   0         Matt   Lee    Susan

我的尝试可以从下面看到,但是有两个问题:

  1. 这三个额外的名称不一定总是不同的-我似乎无法排除先前选择的名称,因为变量b / c / d不在其自身的COALESCE函数范围内。
  2. 由于每个嵌套选择都使用Random()函数,因此效率不是很高。

谁能建议另一种选择我需要的数据的方法(@R_674_7251@te数据库)?欢迎任何帮助/建议-希望我能达到的目标很明确,请随时提出任何澄清。

我目前的尝试:

select a.id,a.Name,a.Category,COALESCE((SELECT b.Name 
                   FROM Details b 
                  WHERE b.Id NOT IN (a.Id)
                    AND b.Category IN (0)
               ORDER BY Random()
                  LIMIT 1),'') as "Name1",COALESCE((SELECT c.Name 
                   FROM Details c 
                  WHERE c.Id NOT IN (a.Id)
                    AND c.Category IN (0)
               ORDER BY Random()
                  LIMIT 1),'') as "Name2",COALESCE((SELECT d.Name 
                   FROM Details d
                  WHERE d.Id NOT IN (a.Id)
                    AND d.Category IN (0)
               ORDER BY Random()
                  LIMIT 1),'') as "Name3"
    FROM Details a
     AND a.Category IN (0)
ORDER BY Random()
   LIMIT 1

大佬总结

以上是大佬教程为你收集整理的SQLite select语句优化建议全部内容,希望文章能够帮你解决SQLite select语句优化建议所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。