代码之家  ›  专栏  ›  技术社区  ›  dropson

MySQL PHP |“从表中选择”使用“字母数字”-UUID。速度与索引整数/索引字符

  •  0
  • dropson  · 技术社区  · 16 年前

    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进行选择,所以我需要知道如果表由100000行组成,我应该选择这两个选项中的哪一个。我会看到什么样的速度差异,UUID的索引会变大,并滞后于DB吗?

    在进行“大”选择之前获取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 回复  |  直到 16 年前
        1
  •  1
  •   ircmaxell    16 年前

    为什么不试试呢?用这些表创建一个新的数据库。编写一个快速的php脚本,用比您能想象的存储更多的记录填充表(如果您期望10万行,请插入1000万行)。然后尝试不同的索引和查询(记住, EXPLAIN 是你的朋友)。。。

    当您最终得到您认为有效的东西时,将查询放入Web服务器上的脚本中,并使用 ab (阿帕奇长凳)。当您增加请求的并发性时,您可以观察发生了什么(一次1个,一次2个,一次10个,等等)。

    所有这些都不会花费太长时间(最多几个小时),但是对于您的具体问题,它会给您一个比任何人都好得多的答案(因为我们不知道您的DB服务器配置、确切的模式、内存限制等等)。。。

        2
  •  1
  •   Emil Vikström    16 年前

    第二种解决方案的性能最好。在这两个解决方案中,您都需要按UUID查找行,但是在第一个解决方案中,您首先按UUID查找行,然后按主键进行更快的查找,但是您已经按UUID找到了正确的行,因此第二次查找更快并不重要,因为第二次查找完全不需要。

    推荐文章