python sqllite并行写_如何在SQLite(w / Python)中优化多个嵌套SELECT?
我不确定是否有任何方法可以组合一些查询,或者从不同角度处理它以提取数据.我还想过构建一个带有计数的第二个表,并在原始表更新时更新它.我今天已经盯着这个太长时间了,所以我明天再打开它,希望能得到专家的一些见解;)
编辑:使用下面提供的GROUP BY答案,我能够在一个查询中获取数据库所需的数据.我切换到Perl,因为Python的嵌套dict支持对于我需要处理它的方式(以特定方式构建一组HTML表)的方式不能很好地工作.以下是修订后的代码片段:
my %data;
my $rows = $db->selectall_arrayref("SELECT COUNT(id),sender,day,hour FROM messages GROUP BY sender,hour ORDER BY sender,hour");
for my $row (@$rows) {
my ($ct,$se,$dy,$hr) = @$row;
$data{$se}{$dy}{$hr} = $ct;
}
for my $se (keys %data) {
print "Sender: $se\n";
for my $dy (keys %{$data{$se}}) {
print "Day: ",time2str('%a',str2time("$dy 2010"))," $dy\n";
for my $hr (keys %{$data{$se}{$dy}}) {
print "Hour: $hr = ".$data{$se}{$dy}{$hr}."\n";
}
}
print "\n";
}
曾经在大约28.024秒执行的现在需要0.415秒!
最佳答案
首先,您可以使用group by子句:
select count(*),sender from messages group by sender;
通过这种方式,您可以为所有发件人执行一个查询,而不是查询每个发件人.另一种可能性是:
select count(*),hour
from messages group by sender,hour
order by sender,hour;
我没有测试它,但至少现在你知道group by子句的存在.这应该减少查询的数量,我认为这是提高性能的第一个重要步骤.
第二,根据搜索列创建索引,在您的情况下,发件人,日和小时.
如果这还不够,请使用分析工具查找花费最多时间的位置.你还应该考虑使用fetchmany而不是fetchall来保持低内存消耗.请记住,因为sqlite模块是用C编码的,所以尽可能使用它.
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

猜你在找的Python相关文章
Python reduce() 函数reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两
由字符串格式转化为日期格式的函数为: datetime.datetime.strptime() 由日期格式转化为字符串格式的函数为: datetime.datetime.strftime() # en
pika可以用来连接rabbitmqpip install pika -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
for循环体内的语句只有一行的情况的下,可以简化for循环的书写,尤其当你需要生成一个可迭代对象的时候 d = {x:x*10 for x in range(3)} print(d) d1 = [x*
必须加# encoding: utf-8否则报错 SyntaxError: Non-ASCII character '\xe6' # encoding: utf-8 import re
当目录结构为下面这样└── utils/│ ├── __init__.py│ └── config.py├── test.py 每个文件夹下都有__init__.py,一个目录如果包含了__init_
在终端分别输入python,python2,python3python和python2默认都是python2python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 sud
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。序列都可
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
