关于索引锁表方面的讨论

聪明的一休 2011-10-19 05:34:00
加精
今天我又对如果利用索引避免锁表方面进行了测试

对于索引的间隙锁,本以为锁定的是索引键值的范围,即满足最小键值至最大键值的记录被锁定

比如我对表中的user_id加索引,修改user_id >=1 and user_id <=3的记录; 或者user_id IN (1,3)
本以为是对user_id为2的记录会上锁,对user_id为4的记录便不会上锁。

但实际发现貌似这样的语句不能利用索引,引起了全表锁定,不知道我的理解是否正确?
...全文
2410 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpc0828 2013-06-20
  • 打赏
  • 举报
回复
innodb添加新字段,并建立普通索引,一定会锁表吗
十年彩虹 2013-03-20
  • 打赏
  • 举报
回复
MyISAM是表级锁定,INNODB只是row level锁定。如题看不出来。静观大侠们的杰作。
烈火蜓蜻 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]

引用 24 楼 wfevgch 的回复:
谢谢各位的关注

确实数据量是一个比较重要的因素,我加了50W记录后测试就基本符合了

现在的结论是用in的话是行锁,只锁住对应行的记录

用范围查询的话,是锁定的索引键值范围,如user_id >=105 and user_id <=110,锁住了105-111的6条记录,最后都多锁了一条记录,呵呵。

各位还有什么要补充的吗?

……
[/Quote]

估计还要看你用的是什么隔离级别吧,如果是可序列化隔离级别的话,才会加键范围锁
ican_areyou 2012-04-21
  • 打赏
  • 举报
回复
mark, 有价值
jiaweiqq123 2011-11-11
  • 打赏
  • 举报
回复
好锁!!
jinguanding 2011-11-11
  • 打赏
  • 举报
回复
推荐大家阅读文章:MySQL InnoDB之事务与锁详解
petrie 2011-10-26
  • 打赏
  • 举报
回复
well
arameter 2011-10-26
  • 打赏
  • 举报
回复
乐观锁,悲观锁
YHL27 2011-10-26
  • 打赏
  • 举报
回复
fine。。
  • 打赏
  • 举报
回复
测试记录增加到1万条,再测试
liuyaqwd 2011-10-25
  • 打赏
  • 举报
回复
嗯真好 长见识了
ob_hubo 2011-10-24
  • 打赏
  • 举报
回复
飘过,~~~~~~,顶了
jemmes210 2011-10-23
  • 打赏
  • 举报
回复
学习学习
se365363 2011-10-22
  • 打赏
  • 举报
回复
过路看看
zhaoxiao90 2011-10-21
  • 打赏
  • 举报
回复
抢分的
A6143 2011-10-21
  • 打赏
  • 举报
回复
国家飞
cgz584520131420 2011-10-21
  • 打赏
  • 举报
回复
show create table 看看
九月茅桃 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
你的show index 和查询语句是什么? 理论上INNODB应该是只锁记录。
[/Quote]

而且是行锁记录,索引行锁记录标志的。
ijlbowxf 2011-10-20
  • 打赏
  • 举报
回复
多学习习
okyzx 2011-10-20
  • 打赏
  • 举报
回复
应该是数据少了。
加载更多回复(20)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧