目前,我使用以下方法从'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来创建所有新行。保持列始终是唯一的。
答案 0 :(得分:1)
第二种解决方案具有最佳性能。您需要在两个解决方案中按UUID查找行,但在第一个解决方案中,您首先通过UUID执行此操作,然后通过主键执行更快的查找,但之后您已经通过UUID找到了正确的行第二次查找更快是没关系的,因为完全不需要第二次查找。
答案 1 :(得分:1)
为什么不尝试一下呢?使用这些表创建一个新的数据库。编写一个快速的PHP脚本来填充表格,记录的记录超出您想象的存储量(如果您期望100k行,则插入1000万行)。然后尝试不同的索引和查询(记住,EXPLAIN
是你的朋友)......
当你最终得到你认为有效的东西时,将查询放入网络服务器上的脚本中并用ab
(Apache Bench)命中它。您可以观察在增加请求的并发性时发生的情况(一次1个,每次2个,每次10个,等等)。
所有这些不应该花费太长时间(最多可能是几个小时),但是它会给你一个比SO的任何人更好的答案来解决你的特定问题(因为我们不知道你的数据库服务器配置,确切的架构,内存限制等)...