数据库使用索引。通过这种方式,它可以快速找到与给定用户 ID 相关的数据。
根据索引结构、空间占用等...有一个好处,即不是搜索 N 列,而是搜索 - 例如 - log(N)
。千亿行的二分法搜索
N = 100,000,000,000
将会
Search(N) : search log2(N) = search (36 rows)
而是搜索 10^12 行,只需要分析 36 行。
在你提到的情况下,朋友,每个用户可能有几个朋友,所以
user1 => (userX, userY, userZ, ...)
userX => (userU, userV, user1, ...)
这意味着 user1 是 userX、userY 等的朋友……也就是说,您没有每个用户的唯一索引。但是每个用户都有一个唯一索引。
在 Mysql 上,那将是
UNIQUE(user1,user2)
这意味着这对夫妇 (user1,user2) 在表中只有一次。语法是
CREATE UNIQUE INDEX friendsindex ON friends(user1,user2)
Friendsindex是索引名称,friends是表。或者如您所说,将表主键声明为(user1,user2)
(每个表的主键都是唯一的)。
--
赢得包括找到给定对象的确切价格的游戏的策略基于相同的原则。假设价格在 1 到 10000 之间。您说出价格,处理人员说+
或-
。您必须在尽可能少的尝试中找到价格。比如价格是6000。
您可以从开始1
并给出所有价格,直到6000
(即 6000 次尝试),但您也可以通过二分法进行
- 你:5000
- 玩家:+
- 7500 或 (10000 - 5000)/2
- -
- 6250 或 (7500 - 5000)/2
- -
- ETC...
您在每次迭代时将剩余范围除以 2。您可以在 12 次尝试中找到,而不是 6000 次尝试 (log2(6000))。
--
关于对数
例如,如何在 中找到 x 2^x = 1024
?或x = log2(1024)
表示以 2 为底的 1024 的对数(答案:10)。在我们的故事中,具有基于二叉树的索引的 1024 行表需要 10 次尝试(最多)才能找到正确的元素(而不是最多 1024 次)。