我正在创建一个表,然后显示记录,这让我想知道。
如果我存储,说'Eating Habits'有一个make(素食,非素食和素食),如果我将'eating_habits'存储为int或tinyint或varchar或enum类型,它会对查询速度产生任何影响吗?
使用<<p>所以strong> 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[approach 2]
快/慢 // script will same as above aproach 1
....
比使用int或tinyint with join****[approach 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[approach 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'];
}
比- using enum[approach 5]
快/慢 // script will same as above approach 3
.....
从上面的5种方法,这将给我更快的结果来搜索,获取和显示记录在PHP页面?
速度差异不显著。最大的成本是读取记录。因此,较短的记录通常对性能更好。那么您建议的1字节的ENUM
是最小的。
ENUM
的缺点是,如果您添加一个新选项,您需要将表ALTER
。
类似地,1字节的TINYINT
略快于4字节的INT
。
如果你只打算有几千行,简单地把它设置为VARCHAR(..)
,不用担心它。如果您希望有数亿行,做仔细选择数据类型。