标签: fetchall

为什么在获取结果的两倍时,相同的SQLite查询速度要慢30倍?

我一直在努力加速我现在使用大约一周的查询,并在这里询问了几个问题(如何在运行sqlite查询后加快获取结果?,sqlite.fetchall()是否正常是如此之慢?,如何以有效的方式使用min()和max()?).

从那里给出的答案非常有用的帮助下,我设法让时间缩短到sqlite的查询到100.95秒,使用fetchall服用:1485.43.这仍然是不够的,所以在尝试了一些不同的索引后,我设法将查询时间缩短到0.08一个样本的秒数,并将获取时间缩短到54.97几秒钟.所以我觉得我终于设法加快了速度.

然后查询运行下一个样本,花费0.58几秒钟,并且fetchall花费3952.80几秒钟.对于第三个样本,查询花了1.01几秒钟,花了1970.67几秒钟来取消.

第一个样本获取12951行,第二个样本获取24972行,第三个6470行.我很好奇为什么第一个样本获取行的速度要快得多,因为它只有大约一半的量来获取第二个例子.


代码(spectrumFeature_inputValues是(1,),(2,)和(3,),来自使用的3个样本.):

self.cursor.execute('begin')
self.cursor.execute("EXPLAIN QUERY PLAN "+
                    "SELECT precursor_id, feature_table_id "+
                    "FROM `MSMS_precursor` "+
                    "INNER JOIN `spectrum` ON spectrum.spectrum_id = MSMS_precursor.spectrum_spectrum_id "+
                    "INNER JOIN `feature` ON feature.msrun_msrun_id = spectrum.msrun_msrun_id "+
                    "WHERE spectrum.scan_start_time BETWEEN feature.rtMin AND feature.rtMax "+
                    "AND MSMS_precursor.ion_mz BETWEEN feature.mzMin AND feature.mzMax "+
                    "AND feature.msrun_msrun_id = ?", spectrumFeature_InputValues)
print 'EXPLAIN QUERY PLAN: …
Run Code Online (Sandbox Code Playgroud)

python sqlite performance fetchall

32
推荐指数
1
解决办法
6882
查看次数

关于mysql游标和迭代器

想象一下,我有一个mysql游标和数据读取.数据量可能非常大,我想每次处理一行.

一个简单直接的方式可能是这样的:

while True:
    row = cursor.fetchone()
    if not row: break
    .....
Run Code Online (Sandbox Code Playgroud)

但这看起来不太好,所以我想知道这种方式是否像想象的那样有效:

for row in iter(cursor.fetchall())
Run Code Online (Sandbox Code Playgroud)

我想知道的是:如果我使用这种iter(cursor.fetchall())方式,它是先获取所有数据还是一次只取一行?

任何想法都表示赞赏.

谢谢

python mysql cursor fetchall

23
推荐指数
1
解决办法
2万
查看次数

致命错误:调用未定义的方法mysqli_result :: fetch_all()

我在Ubuntu 10.04中遇到PHP问题.当我尝试使用mysqli_result :: fetch_all时出现此错误:

调用未定义的方法mysqli_result :: fetch_all()

但是,它适用于Windows XP.

代码:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)

我不想在循环中使用fetch_assoc,因为我将结果发送到另一个层进行处理.

我使用的是PHP 5.4.4.和php -m | grep mysql mysqlnd模块它没有出现.我该如何安装?这可能是问题吗?

php mysqli fetchall mysqlnd

20
推荐指数
2
解决办法
5万
查看次数

python postgres我可以fetchall()100万行吗?

我在python中使用psycopg2模块从postgres数据库中读取,我需要对列中的所有行进行一些操作,该行有超过100万行.

我想知道会cur.fetchall()失败或导致我的服务器出现故障?(因为我的RAM可能不会那么大,无法保存所有数据)

q="SELECT names from myTable;"
cur.execute(q)
rows=cur.fetchall()
for row in rows:
    doSomething(row)
Run Code Online (Sandbox Code Playgroud)

更聪明的方法是什么?

python postgresql fetchall

18
推荐指数
3
解决办法
2万
查看次数

PDO循环播放并打印fetchAll

我无法从fetchAll获取数据以便有选择地进行打印.

在普通的mysql中我这样做:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)){
   $id = $row['id'];
   $n = $row['n'];
   $k = $row['k'];
}
Run Code Online (Sandbox Code Playgroud)

在PDO中,我遇到了麻烦.我绑定了params,然后我将获取的数据保存到$ rs中,就像上面一样,目的是以相同的方式循环它.

$sth->execute();
$rs = $query->fetchAll();
Run Code Online (Sandbox Code Playgroud)

麻烦的部分来了.我该怎么做PDO-wise来获得与上面的while循环相匹配的东西?!我知道我可以使用print_r()或dump_var,但这不是我想要的.我需要做我以前能用普通mysql做的事情,比如根据需要单独抓取$ id,$ n,$ k.可能吗?

提前致谢..

php mysql database pdo fetchall

9
推荐指数
1
解决办法
3万
查看次数

Php准备好的声明关闭了仿真

使用带有pdo的预准备语句时,关闭仿真是否有任何副作用?我正在使用select*并限制需要作为int而不是字符串处理的结果.我可以做两件事之一.

$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
Run Code Online (Sandbox Code Playgroud)

或者使用param类型显式绑定这些变量:

$stm = $pdo->prepare('SELECT * FROM table LIMIT ?, ?');
$stm->bindParam(1, $limit_from,PDO::PARAM_INT);
$stm->bindParam(2, $per_page,PDO::PARAM_INT);
$stm->execute();
$data = $stm->fetchAll();
Run Code Online (Sandbox Code Playgroud)

任何利弊?显然,关闭仿真可以节省很多绑定.

php prepared-statement fetchall

7
推荐指数
2
解决办法
4409
查看次数

Zend Framework fetchAll

我可以覆盖模型中的fetchall方法吗?每次调用fetchAll时我都需要检查.该模型扩展了Zend_db_table_abstract

php overriding zend-framework model fetchall

5
推荐指数
1
解决办法
3627
查看次数

[zend] [db] fetchAll包含多个变量

我正在尝试在具有2个变量的查询上使用fetchAll.我无法弄清楚语法.我只能管理1个变量:

$sql = "SELECT * FROM mytable WHERE field1 = ?";
$this->_db->fetchAll($sql,$value1);  # that works
Run Code Online (Sandbox Code Playgroud)

但是,当查询有多个变量时,我遇到了一些问题

$sql = "SELECT * FROM mytable WHERE field1 = ? AND field2 = ?";
$this->_db->fetchAll($sql,$value1,$value2); # doesn't work
$this->_db->fetchAll($sql,array("field1"=>$value1,"field2"=>$value2)); # doesn't work either
Run Code Online (Sandbox Code Playgroud)

我之所以要用?而不是将变量直接放入查询是我已经学会了使用?允许查询由db引擎一般编译并提高性能.

zend-framework parameterized fetchall zend-db

5
推荐指数
2
解决办法
1万
查看次数

php PDO fetchAll() - 虽然不起作用,但foreach有效

我想知道我是否做得很好或者fetchAll()不适用于WHILE.

这是一个例子

$db=new PDO("mysql:host=" .$dbhost. "; dbname=" . $dbname, $dbuser, $dbpass);

$page=$db->prepare("SELECT * FROM page");
$page->execute();

foreach ($page->fetchAll(PDO::FETCH_ASSOC) as $row) {

//echo a row
//is working
}
Run Code Online (Sandbox Code Playgroud)

但是,如果尝试循环一段时间我

while ($row=$page->fetchAll(PDO::FETCH_ASSOC)){

//echo a row
//Show empty
}
Run Code Online (Sandbox Code Playgroud)

我试图只使用fetch(),它正在工作,我的问题:为什么fetchAll()不能用于"WHILE"?

php foreach pdo fetchall while-loop

5
推荐指数
3
解决办法
6万
查看次数

PostgreSQL psycopg2返回一个字符串元组而不是元组元组?

我有一个奇怪的问题,我不太确定如何解决它搜索谷歌/ SO后发现没什么相似的.

当我试图从光标中获取查询结果时,它会给我一个元组元组,除了元组是字符串?下面是代码.

def queryFeeds(db):
   sql = """SELECT ngo.n_id, feeds.url FROM ngo 
    JOIN feeds ON ngo.n_id = feeds.n_id;"""

   db.c.execute(sql)

   feeds = db.c.fetchall()

   return feeds
Run Code Online (Sandbox Code Playgroud)

此处的打印输出是函数返回的feeds变量:

feeds[0]
('(277,http://resultsuk.wordpress.com/feed)',)

feeds[0][0]
'(277,http://resultsuk.wordpress.com/feed)'

type(feeds[0][0])
<type 'str'>

feeds[0][0][0:10]
'(277,http:'
Run Code Online (Sandbox Code Playgroud)

db只是一个具有数据库连接的类,其中db.c是游标.提前致谢.删除的数据是http://链接,因为我的声誉很低,所以我不会发布这些链接.

干杯,

卢卡斯

postgresql psycopg2 fetchall

5
推荐指数
1
解决办法
1494
查看次数