我正在创建一个表然后显示记录,这让我很奇怪。
如果我存储,说'吃习惯'有制作(素食,非素食和素食),如果我将'eating_habits'存储为 int < strong>或 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页面中搜索,获取和显示记录的结果更快?
答案 0 :(得分:1)
速度差异微不足道。最大的成本是阅读记录。为此,较短的记录通常更好的性能。然后,您建议的1字节ENUM
是最小的。
ENUM
的一个缺点是,如果您添加新选项,则需要ALTER
该表。
同样,1字节TINYINT
比4字节INT
略快。
如果您只有几千行,只需将其设为VARCHAR(..)
并且不用担心。如果您希望拥有数亿行, do 会仔细选择数据类型。