查询:
SELECT COUNT(online.account_id) cnt from online;
Run Code Online (Sandbox Code Playgroud)
但是在线表也被事件修改,因此我经常可以通过运行看到锁定show processlist.
MySQL中是否有任何语法可以使select语句不引起锁定?
而且我忘了在上面提到它是在MySQL奴隶数据库上.
我加入my.cnf:transaction-isolation = READ-UNCOMMITTED
奴隶后会遇到错误:
错误'无法进行二进制日志记录.消息:InnoDB中的事务级别"READ-UNCOMMITTED"对于查询的binlog模式"STATEMENT"不安全
那么,是否有兼容的方法来做到这一点?
我正在公司内部讨论如何在这个问题上循环查询:
$sql = "
SELECT foreign_key
FROM t1";
foreach(fetchAll($sql) as $row)
{
$sub_sql = "
SELECT *
FROM t2
WHERE t2.id = " . $row['foreign_key'];
foreach(fetchAll($sub_sql) as $sub_row)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
而不是像这样使用sql连接:
$sql = "
SELECT t2.*
FROM t2
JOIN t1
ON t1.foreign_key = t2.id";
foreach(fetchAll($sql) as $row)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
关于这个的额外信息,数据库是巨大的,数百万行.
我当然搜索了这个问题的答案,但是没有人能以一种好的方式回答这个问题,并且通过大量的投票让我确信一种方式比另一方更好.
有人可以向我解释为什么其中一种方法比另一种更好?