MySQL中的表格是MyISAM。
现在我想选择很多数据。
$res = $db->query("SELECT ...");
// -- Break 1
while($row = $res->fetch_assoc()) {
//working with the row;
}
// -- Break 2
桌子上的锁什么时候结束?在休息1或休息2?
答案 0 :(得分:0)
答案 1 :(得分:0)
// - Break 1
在此行之前的过程中加载数据。表已发布。
此时进一步的数据操作是在PHP应用程序中,不再需要来自数据库的数据。
对于之前没有数据锁定的评论,这取决于您的观点。如果您的查询快速返回两个记录,则看起来没有锁(技术上不正确,但很容易弄错)。但是如果你的查询很复杂并且你的结果设置很大,这需要一些重要的时间来返回结果(例如,大约45秒),那么在MyISAM中确实存在表锁定将变得非常明显。在45秒返回期间,一个简单的“show processlist”清楚地显示了锁定表。 (等待桌面锁定是一种死亡的赠品)。每天都会发生在较大的Vicidial设施上。
索引表通常可以减少锁定时间。设置“limit 50”(某些数字来限制结果数据集)可以减少锁定时间,如果这也是查询的可行选项。
另请注意,锁定有一些旁路方法,具体取决于尝试“播放”的查询。选择vs插入vs更新通常可以相互绕过(这是研究锁定机制可以派上用场的地方)。测试是一个好主意,以确保你理解它。永远不要害怕在其中创建一个包含3000万条记录的表,并运行一个巨大的查询来查看选择/插入/更新之间的锁和什么不存在,而其中一个是巨大的而另一个很小并且试图在“大玩”时一个正在运行。即使你认为你“得到它”,结果也会让你感到惊讶。然后观察能否明确说明查询不太重要以及后续查询轮换其类型时会发生什么。