gpt4 book ai didi

Mysql 共享主键同一列的键概念

转载 作者:行者123 更新时间:2023-11-29 18:04:21 25 4
gpt4 key购买 nike

如下代码,我将chat_id和student_id设置为主键,以便为另一个student_id添加相同的聊天。当它投入生产时,记录会很多。我是否应该仅为 Student_id 添加一个索引,以便每个用户返回屏幕查看最近消息时的搜索速度更快?

CREATE TABLE `tim_chat_recipients` (
`chat_id` INT(11) NOT NULL,
`student_id` INT(11) NOT NULL,
`message_status` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '1:New, 2:Read, 3:Deleted',
PRIMARY KEY (`chat_id`, `student_id`))COLLATE='latin1_swedish_ci' ENGINE=InnoDB;

最佳答案

如果代码要搜索 student_id 没有 chat_id,则索引至少超过 student_id必需的,否则查询将导致不可扩展的表/集群扫描..这是因为隐式集群/索引 (chat_id ,student_id) 不能在没有提供chat_id的情况下用于索引/归约。

此二级索引 - INDEX(student_id, [可选其他列]) - 可能包含其他列,作为索引的一部分或包含,尽管“适当的选择” “很大程度上取决于查询。在这种情况下,包含 message_status 列可能是有意义的,以便能够使用“未看到的消息”作为具有最小读取 IO 的过滤器,因为它可以避免探测回表/集群。 (索引是关于平衡维护/磁盘成本和查询 yield 。)

简而言之:查询规划器在 SARGABLE query 中选择索引,索引的左侧部分必须已知并在 WHERE 或有时在 JOIN .. ON 子句中提及。

关于Mysql 共享主键同一列的键概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com