【发布时间】:2012-10-28 19:34:08
【问题描述】:
我正在使用 PDO。所以我有一个语句准备一个查询来选择一堆记录。示例:
//select duplicates
$stmt = $this->db->prepare('SELECT Name COUNT( * ) AS CNT
FROM `Test`
GROUP BY Name
HAVING CNT > 1');
$stmt2 = $this->db->prepare('SELECT * FROM Test2 WHERE TName = ?');
请注意,我确实需要选择所有数据,而不是某些列。该表包含 5k 条记录,有时甚至更多。我需要选择所有 5k 条记录,并且对于每条记录,我都需要执行另一个查询来选择其他内容。
$arr = array();
while ($row = $stmt->fetch(DB::FETCH_ASSOC)) {
$stmt2->execute($row['Name']);
$arr[] = $stmt2->fetchAll(DB::FETCH_ASSOC);
}
我知道我可以使用连接,但对于我的情况,连接不起作用,因为我需要循环数据并为每个 stmt1 行执行 stmt2。
当我运行它时,它最多需要 10-15 分钟,这是我不能允许的,我需要它更快。谁能告诉我问题是什么? 5k 条记录似乎不需要循环。
STMT1 returns up to 5.5k records
我需要为每个返回的副本提供数据:
【问题讨论】:
-
你执行的第二个查询是什么?
-
您在查询的表上有正确的索引吗?
-
是的,我确实使用了索引,并且我更新了第二个查询的内容
-
“但对于我的情况,连接将不起作用” - 我非常怀疑。根据您的代码,连接正是您所需要的。而且它很慢,因为在加载一个页面时,每个页面加载执行 5000 个查询,因为每条记录执行一个查询。太荒谬了。
-
但我使用的实际代码将无法加入,因为我选择了重复项并且对于每个重复项我需要运行代码
标签: php mysql loops pdo query-optimization