php - MySQL PHP | "SELECT FROM table"使用 "alphanumeric"-UUID。速度与索引整数/索引字符

标签 php mysql select uuid

目前,我使用以下方法从“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/

相关文章:

php - 英语到时间

php - 在我的数据库中实现图片表的最佳方式

mysql通过参数关系选择数据

php - array_keys 与 foreach 获取所有键

php - Laravel [5.2.21] 自定义 Auth Guard 不持久

python - 执行 Django manage.py syncdb 时出错

sql-server - 不带 Order By 子句的 SQL Select 语句的顺序

php - 选择所有匹配的两个字段并用 mysql 按这两个字段分组

php - 使用 PHP 和 nginx X-Accel-Redirect 服务大文件

PHP创建表错误1064