gpt4 book ai didi

php - 需要有关 mysql 连接的帮助

转载 作者:行者123 更新时间:2023-11-29 05:46:30 25 4
gpt4 key购买 nike

Users table
user_id
pic_url
name

friends table
auto_id
userid
friendid
status

actions table
auto_id
userid
type
subject
body
datetime

我想创建一个显示更新的 friend 更新流,可以是博客文章、状态更改,但应该只显示来自已登录用户的 friend 的更新

这是我的想法,但我的用户群非常大,所以性能是必须的,有更好的方法吗?请告诉我

SELECT u.user_id, u.pic_url, u.name, a.auto_id, a.userid, a.type, a.subject, a.body, a.datetime
FROM actions AS a
LEFT JOIN users AS u ON u.auto_id=a.userid
LEFT JOIN friends AS f ON f.userid=a.userid
WHERE f.friendid=1 //1 would be my user ID
AND f.status=active

请帮助我认为这是不正确的。

假设有 50,000 个用户,我的用户 ID 是 #1,我是 20,000 个用户的 friend ,它应该返回我是 friend 的用户发布的操作表中的所有条目,还需要修改以包含操作来 self 自己

我听说有人谈论使用某种哈希表来加快查找速度,这样的事情在这里可能吗?

感谢您的帮助

最佳答案

I have heard some people talki about using some sort of hash table for faster lookups would something like that be possible here?

它叫做 index ,并且您应该向您计划使用 JOIN 的每一列添加一个(或匹配显式约束,如 >, >=, =, <=, <IN () 子句,该子句仅匹配指定列表中的项目)。这样数据库服务器就可以直接跳转到索引中的正确条目,而不必对所有表行进行强力搜索。它就像一本书中的索引。如果您想在一本书中找到名字“Knuth”出现的页面,您有两种选择。如果这本书有索引,你会查看索引并希望名字在那里。如果这本书没有索引,您将不得不自己通读整本书,这会花费更长的时间。

如果您关心排序/排序(或进行任何类型的相对数字/字符串比较),它应该是一个排序索引。否则它可以是哈希表索引,这对于有很多行的表来说更快,但不包含排序信息。这些类型的详细信息可能具有不同的语法/选项,具体取决于所使用的数据库服务器软件类型。**(请参阅下面的注释)

请注意,主键已经有一个自动生成的索引,因此您不必自己添加一个。另请注意,如果您有一个多列主键,例如(State, City, Zipcode) 那么在主键的最左边的子集上实际上会有索引,例如您可以免费获得 State、(State,City) 和 (State,City,Zipcode) 的索引,但是如果您想加入 Zipcode 或 City 或 (City,Zipcode),则需要在中创建自己的索引除了主键提供的那些。

在你的例子中,看起来你应该在这些列上有索引(我已经 *-ed 我假设已经是主键的列)。除非您对用户 ID 的数字顺序有任何重要意义,否则它们将是哈希表索引的良好候选者。

Users.user_id*
Friends.user_id
Friends.friend_id
Friends.active
Actions.user_id

**对于 MySQL,您向 CREATE INDEX statement 添加一个子句上面写着 USING HASH 用于哈希表索引,或 USING BTREE(用于排序索引)...忽略 RTREE,因为它们用于空间数据。另请注意,MySQL 不允许在常用存储引擎 InnoDB 和 MyISAM 上使用 HASH 索引。真正需要高性能的大型数据集可能需要将数据镜像到具有 HASH 索引的内存表上。有了 50,000 行,您可能不需要担心; BTREE 的搜索时间是 O(log n) 而 HASH 是 O(1) 并且可能没有太大区别。 BTREE 非常宽,设计得不深;要在搜索步骤中要求进行一次额外的比较,您可能需要将行数增加 10 或 100 倍。

关于php - 需要有关 mysql 连接的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175227/

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