0

伙计们,我阅读了 MySQL 5.5 的参考手册,但理解行级锁定非常棘手。我正在使用 MySQL innoDB 并想了解具有复合主键的表上的行级锁定。这两个键都是从父表中一对一地识别键。

这是表格示例 在此处输入图像描述

我想在上表中运行 Haversine 公式(我知道查询和公式),以便在 where 子句中我必须提供 trip_route_id。这样Haversine 公式查询在特定的trip_route_id 上运行。

另一方面,一些线程/会话正在插入到该表中,而一些正在搜索。我在两个 PK 列上都有一个默认的 PRIMARY 索引。

现在的问题:我的完整表会被锁定还是只锁定具有 trid_route_id = someProvidedId 的行?

编辑: PK 列的索引。 在此处输入图像描述

请让我知道是否需要其他解释?

谢谢。

4

1 回答 1

0

行级锁定不是问题。

您正在使用纬度和经度搜索“附近”的事物?

好吧,没有任何额外的努力,这将需要一个表扫描,随着表的增长,扫描速度越来越慢。

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 英里/公里的半径范围内”。

于 2018-05-07T00:24:23.520 回答