作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
各位,我阅读了 MySQL 5.5 的引用手册,但是理解行级锁定非常困难。我正在使用 MySQL innoDB,想要了解具有复合主键的表上的行级锁定。两个键都是与父表一对一的标识键。
我想在上表上运行Haversine公式(我知道查询和公式),这样在where子句中我必须提供trip_route_id。这样半正矢公式查询就可以在特定的 trip_route_id 上运行。
另一方面,一些线程/ session 正在插入到该表中,而另一些则正在搜索。我在两个 PK 列上都有一个默认的 PRIMARY 索引。
现在的问题是:我的整个表会被锁定还是仅锁定 trid_route_id = someProvidedId 的行?
如果需要其他解释,请告诉我?
谢谢。
最佳答案
行级锁定不是问题。
您正在使用纬度和经度搜索“附近”的事物?
好吧,无需任何额外的努力,这将需要表扫描,随着表的增长,扫描速度会越来越慢。
向 WHERE
子句添加“边界框”。如果这还不够加快速度,请返回查询和表大小。使用边界框的示例:
WHERE lat BETWEEN 45.45 - 0.77 AND 45.45 + 0.77
AND lng BETWEEN 99.11 - 1.11 AND 99.11 + 1.11
将过滤到 (45.45, 99.11) 约 50 英里范围内的项目。 “盒子”大约是一个正方形。添加距离检查可以让您进入“xx 英里/公里的半径内”。
关于MySql - innodb - 复合键上的行级锁定如何用简单的话工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49956092/
我是一名优秀的程序员,十分优秀!