目前,我使用以下方法从“table01 和 table02”中选择行:
SELECT t1.*,t2.* FROM table01 AS t1
INNER JOIN table02 AS t2 ON (t1.ID = t2.t1ID)
WHERE t1.UUID = 'whatever';
UUID 列是唯一索引,类型:char(15),带有字母数字输入。我知道这不是从数据库中选择数据的最快方法,但 UUID 是前端可用的唯一行标识符。
由于我必须按 UUID 而不是 ID 进行选择,因此如果假设表由 100'000 行组成,我需要知道应该选择这两个选项中的哪一个。我会关注哪些速度差异,UUID 的索引是否会变大并落后于数据库?
在进行“大”选择之前获取 ID
1. $id = SELECT ID FROM table01 WHERE UUID = '{alphanumeric character}';
2. SELECT t1.*,t2.* FROM table01 AS t1
INNER JOIN table02 AS t2 ON (t1.ID = t2.t1ID)
WHERE t1.ID = $id;
或者保持现在的样子,使用 UUID。
2. SELECT t1.*,t2.* FROM table01 AS t1
INNER JOIN table02 AS t2 ON (t1.ID = t2.t1ID)
WHERE t1.UUID = 'whatever';
旁注:所有新行都是通过在尝试插入新行之前检查系统生成的 uniqueid 是否存在来创建的。保持列始终唯一。
最佳答案
为什么不尝试一下呢?使用这些表创建一个新数据库。编写一个快速的 php 脚本,用比您想象的存储更多的记录填充表(如果您期望 10 万行,则插入 1000 万行)。然后尝试不同的索引和查询(记住,EXPLAIN
是你的 friend )...
当您最终得到您认为有效的东西时,将查询放入网络服务器上的脚本中,并使用 ab
(Apache Bench) 进行命中。您可以观察当增加请求的并发性时会发生什么(一次 1 个、一次 2 个、一次 10 个等)。
所有这些都不会花费太长时间(最多可能几个小时),但对于您的具体问题,它会给您一个比 SO 中的任何人更好的答案(因为我们不知道您的数据库服务器配置,确切的架构、内存限制等)...
关于php - MySQL PHP | "SELECT FROM table"使用 "alphanumeric"-UUID。速度与索引整数/索引字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025083/