SQL SELECT和PHP的反向速度INT vs TINYINT vs VARCHAR vs ENUM?

时间:2015-08-31 00:04:29

标签: php mysql performance postgresql select

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

如果我存储,说'吃习惯'有制作(素食,非素食和素食),如果我将'eating_habits'存储为 int tinyint varchar 枚举类型。

使用 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 with 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'];
}

更快/更慢 - 使用枚举 [接近5]

  // script will same as above approach 3
  .....

从上面的5方法中,我会在php页面中搜索,获取和显示记录的结果更快?

1 个答案:

答案 0 :(得分:1)

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

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

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

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