【发布时间】:2020-06-03 04:38:21
【问题描述】:
我在 session 表中有一些数据,其中包含 用户位置 以及与用户相关的一些其他数据
会话表由多个列组成,例如
-
id -
PRIMARY KEY AUTO-INCREMENT -
session_id -
UNIQUE KEY(每次都是唯一的,即使用户多次登录,也会生成UNIQUE) - user_id(此用户 ID 对每个用户都是唯一的)
- user_location(保存用户的坐标)
问题说明
我想知道以下两个查询之间是否存在性能差异。
第一个查询
SELECT
user_locationFROM session WHEREsession_id= 'some-session-id-goes-here';
第二次查询
SELECT
user_locationFROM session WHEREsession_id= 'some-session-id-goes-here' ANDuser_id='usome-user-id';
这两个查询都提供了正确的数据,但如果假设此会话表中存在数百万个数据,是否会对性能产生任何影响。
在 smaller 的 data < 4000 集合上运行两个查询not 并没有给 fetching time 带来任何差异。
【问题讨论】:
-
由于 user-id 不是键并且 session-id 是唯一键,这两个查询不会有任何性能差异。您也可以使用
explain进行检查 -
@ruhul 好的,我会试试这个。
-
如果
session_id是主键(假设它也不为空)而不是唯一键,那么性能将是相同的,并且可能比当前的两个查询更好。需要id吗? -
session_id不是 NULL,每次都会有一些UNIQUE值。你能说出在 SELECT 操作中PRIMARY KEY会比UNIQUE更好吗? @danblack 和id不需要太多,只是为了正常的自动增量 -
如果在另一个表中引用了
id,或者您编写了代码,则可能不需要它。 AI 确实可以很容易地在表的末尾插入,而不是在添加非顺序 PK 时重新平衡。这个doc 有一点关于主键和辅助键。基本上,辅助键以主键 id 隐式结束,通过辅助键获取需要返回主(集群)键以检索不在索引中的字段,如user_location。以session_id作为PK,它已经找到了。但是可能会增加插入惩罚。
标签: mysql