mysql锁和索引之间的联系
技术百科
小云云
发布时间:2018-03-17
浏览: 次 在平时我们用mysql的锁时,一般刚接触数据库是很少考虑锁的效率,一般只求到达防止并发的目的就可以了,但是随着数据量的增大我们就会发现有很多sql我们已经写的非常优化了,但是有时候还是很慢,很难找到原因,这时候我们就应该考虑一下是不是mysql的锁在导致的。
我们首先建立一个新的数据表:
这里我们的主键默认是有索引的;这边加几条数据
然后我们开两个进程进行测试:
先加一个where条件没有涉及到索引的锁:
然后我们在第二个窗口进行一个更新这一行的数据,我们会发现这个操作会被卡着,
然后我们提交事务会发现第二个窗口的数据会立马执行,
从上面来看
似乎没有任何问题,这样确实达到了我们想要的目的,但是你可以再加同样的锁,试着更新下其他的数据比如我下面执行的数据:
上面的三种情况都是我用同样的流程测试的,他们都会被卡住,这样问题就来了,我们其实在锁住name='测试姓名'的时候或许只是想锁住id=133和id=134两行,我们并不想锁住135,136,137,但是这三行我们也访问不了,因为我们的锁是一个表锁,我们来试一下另一种用锁时用到索引的情况:
上面用锁时用到了索引,但是我们在更新数据时还是被卡住了;这里我们就会觉得索引其实也没什么用,但是你遇到同样的锁,更新数据时也用到索引是可以看一下效果:
我们会发现这个没有被锁卡住,直接更新了;
下面总结一下:如果我们的锁用到索引就是行锁,如果没有用到索引就是表锁,但是我们操作的数据必须用到锁才行;
下面我们来说一下为什么会这样:
首先我们知道如果没有建立索引的话我们在进行数据选取或者定位的时候是通过全表扫描的形式来进行的,这样就会形成表锁,要是有索引的话就会直接定位到指定的行,就是形成行锁,但是要注意你在更新数据是假如没用到索引也会全表扫描,当扫到被锁的这一行是也会被锁住,所以达不到想要的效果;
相关推荐:
mysql的锁机制_MySQL
MySQL锁的用法之表级锁
如何实现MySQL锁的优化
# 就会
# 是一个
# 都是
# 也会
# 来了
# 第二个
# 如果没有
# 时用
# mysql
# 锁住
# 这一行
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- c++怎么用jemalloc c++替换默认内存分
- LINUX怎么进行文本内容搜索_Linux gre
- Bpmn 2.0的XML文件怎么画流程图
- c++中如何使用虚函数实现多态_c++多态性实现原
- Win11怎么设置默认邮件客户端 Win11修改M
- Mac怎么进行语音输入_Mac听写功能设置与使用【
- Go语言中slice追加操作的底层共享机制详解
- php怎么捕获异常_trycatch结构处理运行时
- Win11怎么查看硬盘型号_Windows 11检
- Windows7怎么找回经典开始菜单_Window
- Win11搜索栏无法输入_解决Win11开始菜单搜
- PHP的Workerman对架构扩展有啥帮助_应用
- Windows蓝屏错误0x0000002C怎么解决
- 如何使用Golang实现容器自动化运维_Golan
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- C#怎么创建控制台应用 C# Console Ap
- c# Task.Yield 的作用是什么 它和Ta
- Go 中 defer 语句在 goroutine
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- Win11任务栏怎么固定应用 Win11将软件图标
- Windows10电脑怎么连接蓝牙设备_Win10
- Win10如何优化内存使用_Win10内存优化技巧
- 如何关闭Win10自动更新更新_Win10系统自动
- Python日志系统设计与实现_高可观测性架构实战
- PythonPandas数据分析教程_数据清洗与处
- php做exe支持多线程吗_并发处理实现方式【详解
- Python项目维护经验_长期演进说明【指导】
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- Win11怎么更改文件夹图标_自定义Win11文件
- php修改数据怎么改富文本_update更新htm
- 如何使用Golang实现跨域请求支持_Golang
- Win11怎么恢复旧版开始菜单_通过软件还原Win
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- 如何使用Golang实现路由参数绑定_使用Mux和
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- Windows10系统怎么查看防火墙状态_Win1
- C++中的std::shared_from_thi
- c++怎么处理多线程死锁_c++ lock_gua
- php打包exe后无法读取环境变量_变量配置方法【
- php后缀怎么变mp4能播放_让php伪装mp4正
- Win11键盘快捷键大全_Windows 11常用
- Win11声音忽大忽小怎么办 Win11音频增强功
- Win11系统更新后黑屏怎么办 Win11更新黑屏
- 如何在Golang中处理JSON字段缺失_Gola
- Linux如何安装JDK11_Linux环境变量配
- 如何在Golang中优化文件读写性能_使用缓冲和并
- 如何使用 Selenium 正确获取篮球参考网站球
- Win11怎么关闭自动维护 Win11禁用系统自动
- Windows服务无法启动错误1067是什么_进程

QQ客服