选择查询锁InnoDB表
问题描述:
我做一个很简单的从表中选择喜欢选择查询锁InnoDB表
SELECT column FROM table WHERE id=5;
ID是一个主键,所有的表都使用的是InnoDB。
当我能够在phpMyAdmin分析和运行此查询我看到这一点:
Status Time
starting 0.000025
checking query cache for query 0.000034
checking permissions 0.000004
Opening tables 0.000022
System lock 0.000004
Table lock 0.000022
init 0.000016
optimizing 0.000008
statistics 0.000030
preparing 0.000022
executing 0.000003
Sending data 0.000009
end 0.000002
query end 0.000003
freeing items 0.000061
storing result in query cache 0.000005
logging slow query 0.000002
cleaning up 0.000002
我运行相同的查询第二次,我得到这个,因为查询缓存:
Status Time
starting 0.000022
checking query cache for query 0.000005
checking privileges on cached 0.000003
checking permissions 0.000020
sending cached result to clien 0.000055
logging slow query 0.000002
cleaning up 0.000002
为什么是这样一个简单的选择查询锁定表?
答
请注意,主键是聚簇索引(称为gen_clust_index)。共享索引锁有可能存在id = 5所在的索引页面。
Exclusive Index Locks and Shared Index Locks try to coexist in InnoDB尽可能地适应
- 交易
- 隔离级别
- ACID compliance
- MVCC
尝试运行SHOW ENGINE INNODB STATUS\G
和look for such locks。
你确定它是?我不是专家,但是这条线可能意味着“检查没有表锁定”。通常,afaik,InnoDB从不应用全表锁,除非明确要求。 – 2011-12-23 16:23:06
是的,也许你是对的,我没有找到一个地方,它描述了所有这些线的意思。 – 2011-12-23 16:27:46