【问题标题】:SQL SELECT and PHP retrive speed INT vs TINYINT vs VARCHAR vs ENUM?SQL SELECT 和 PHP 检索速度 INT vs TINYINT vs VARCHAR vs ENUM?
【发布时间】:2015-11-24 23:09:47
【问题描述】:

我正在创建一个表格然后显示记录,这让我很奇怪。

如果我存储,说“饮食习惯”有一个品牌(素食、非素食和蛋食),如果我将“饮食习惯”存储为 inttinyintvarcharenum 类型。

使用 int [方法 1]

也是如此
// to select records  
SELECT * FROM table WHERE eating_habits = 2 AND ...;

//for display in php  
foreach($all_records AS $key => $val) {
if($val['eating_habits'] == 1)
    echo 'Vegetarian'; 
elseif($val['eating_habits'] == 2)
    echo 'Non-Vegetarian';
else
 echo 'Eggetarian';
}

快/慢于 - 使用 tinyint [方法 2]

 // script will same as above aproach 1
  ....

比使用 int 或 tinyint 快/慢 - join****[方法 3]

// to select records  
 SELECT *.t1  FROM table1 as t1 join table2 as t2 on ti.eat_habit_id=t2.eating_habits 
 WHERE t2.eating_habits = 2 AND ...;
//for display in php  
 foreach($all_records AS $key => $val) {
  echo $val['eating_habits'];
  }

比使用 varchar [方法 4]

更快/更慢
// to select records  
SELECT * FROM table WHERE eating_habits = 'Non-Vegetarian' AND ...;

//for display in php  
foreach($all_records AS $key => $val) {
echo $val['eating_habits'];
}

比使用 enum [方法 5]

更快/更慢
  // script will same as above approach 3
  .....

从上述 5 种方法中,哪一种方法可以让我更快地在 php 页面中搜索、获取和显示记录?

【问题讨论】:

  • 是什么阻止你对它进行基准测试?
  • 我没找到你?你能详细说明一下吗?
  • 始终在设计时考虑到规范化。在第一次设计迭代之后,模式必须尽可能标准化。仅在您证明您尝试做的事情值得优化之后进行优化。并解决您最初的问题:没关系。完全没有。
  • @amitgupta 我确定你还没有阅读我的评论。为什么首先需要优化它?
  • 你问错问题了。除非您遇到特定的性能问题,否则您应该关注“如何让我的数据库设计易于理解、使用和维护”,而不是“哪些数据类型在这个微基准测试中运行得更快”。

标签: php mysql performance postgresql select


【解决方案1】:

速度差异微不足道。最大的成本是阅读记录。为此,较短的记录通常对性能更好。然后你建议的 1 字节 ENUM 是最小的。

ENUM 的一个缺点是,如果您添加新选项,则需要 ALTER 表。

同样,1 字节的 TINYINT 比 4 字节的 INT 略快。

如果您只有几千行,只需将其设为VARCHAR(..),不用担心。如果您希望有数亿行,仔细选择数据类型。

【讨论】:

  • 未来数百万行,而食人习惯总是只包含3种值。因为饮食习惯是普遍真理只有三个(素食,非素食和蛋食)。我想搜索并显示记录,所以我想知道在这种情况下哪种数据类型会给我更快的结果?
  • @amitgupta 没有人能告诉您当您拥有数百万行时会遇到什么问题。但是,既然你问了这样的问题,那么可以假设你会更早地遇到一些更严重的问题。而且它们不会由 int 与 enum 的选择引起。
  • @zerkms,是的,你是对的,我已经准备好面对其他问题,我现在只想通过选择最好的来处理数据库的创建。如果我选择“枚举”,那么它也很容易显示记录,但在“int”的情况下,我必须执行连接或一些手动操作,所以在此之后,我想到了哪个方法会给出更快的结果,包括显示记录也在浏览器中?
  • 3 个值,不太可能每个都添加 4 个。所以ENUM 看起来是最好的——易于读/写、高效(1 字节)等。该表可能只有 1GB。
  • 我一次又一次地看到人们在设计桌子时并没有记住桌子会变大。最好正确设计表格并使用最有效的数据字段类型。
猜你喜欢
  • 2012-10-18
  • 1970-01-01
  • 2015-11-28
  • 2014-12-19
  • 2011-05-16
  • 2011-01-21
  • 2015-05-12
  • 1970-01-01
  • 2011-06-13
相关资源
最近更新 更多