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

时间:2010-06-11 18:00:42

标签: 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来创建所有新行。保持列始终是唯一的。

2 个答案:

答案 0 :(得分:1)

第二种解决方案具有最佳性能。您需要在两个解决方案中按UUID查找行,但在第一个解决方案中,您首先通过UUID执行此操作,然后通过主键执行更快的查找,但之后您已经通过UUID找到了正确的行第二次查找更快是没关系的,因为完全不需要第二次查找。

答案 1 :(得分:1)

为什么不尝试一下呢?使用这些表创建一个新的数据库。编写一个快速的PHP脚本来填充表格,记录的记录超出您想象的存储量(如果您期望100k行,则插入1000万行)。然后尝试不同的索引和查询(记住,EXPLAIN是你的朋友)......

当你最终得到你认为有效的东西时,将查询放入网络服务器上的脚本中并用ab(Apache Bench)命中它。您可以观察在增加请求的并发性时发生的情况(一次1个,每次2个,每次10个,等等)。

所有这些不应该花费太长时间(最多可能是几个小时),但是它会给你一个比SO的任何人更好的答案来解决你的特定问题(因为我们不知道你的数据库服务器配置,确切的架构,内存限制等)...