我有一个关于mysql的严重性能问题
存储引擎是myisam
我在慢日志中找到这样的模式:
如果更新命令很慢,use database_name
将在它前面,锁定时间会很长。
确实使用database_name命令锁定整个数据库?将database_name命令刷新缓存,然后在更新命令中有不良影响吗?
答案 0 :(得分:2)
不,use database命令的成本不高。
但是如果使用MyISAM,UPDATE语句会锁定整个表。您可能会看到多个UPDATE语句相互排队。
我建议对所有表使用InnoDB。不仅因为它支持行级锁定(实际上MVCC比行级锁定更好),而且InnoDB在抵抗数据损坏方面优于MyISAM。
答案 1 :(得分:1)
use database
不锁定数据库。它只是提供了一个默认数据库,以便在将来的查询中引用。
答案 2 :(得分:1)
没有命令既不锁定数据库也不刷新,只是当有许多数据库可供选择时,它只是更容易引用一个数据库。您可能需要查看documentation。
如果您的查询时间很慢,或许可以查看您是否正在对数据库进行任何密集更新,因为MyISAM会在更新时锁定表(而不是像InnoDB这样的行)。