我有一个包含2个字段的产品表。
1)产品id int-7位
2)产品名称
产品名称只能有27个不同的值,如香蕉、苹果等
现在我想知道对我的web服务器资源最好的方法是什么。我是说我应该用1,2,3,...值还是字符串值?
~编辑我的表大约有一百万行,并且随着时间的推移稳步增加。
发布于 2013-04-22 17:50:40
为了提高可读性,您应该对name字段使用VARCHAR。如果你必须在9个月后回到这个问题上来,并记住1是一个苹果还是一个香蕉,你将会有很大的困难。
因为我假设您必须打印出产品名称,所以您基本上是在PHP或MySQL中选择字符串。SELECT * FROM fruit WHERE product_name = 'Banana'或SELECT * FROM fruit where product = 7,然后是foreach($fruits as $fruit): if $fruit['id'] = $row['product'] { return $fruit['name']; } endforeach;
从PHP数组array(1 => 'apple', 2 => 'banana' ... 27 => 'eggplant');赋值也会比在VARCHAR字段上使用MySQL SELECT语句使用更多的开销。您在数据库端获得的任何性能都将在应用程序端损失五倍。
发布于 2013-04-22 17:53:40
使用VARCHAR。
或者,如果您绝对确定产品将保持静态,您可以使用ENUM来节省一些空间,但如果只有27行,那么节省的空间就不会很多。
但是,如果需要引用其他表中的产品,请考虑创建surrogate key (自动递增整数),以节省引用表中的空间(与重复的VARCHAR产品名称或7位产品ID相比)。
注意:“节省空间”不仅仅是存储空间-更小的数据意味着更少的I/O和更有效的缓存和给定数量的RAM。这对于小表格来说并不重要,但在大表格中可能会有所不同(例如,如果你有一个引用产品的大“订单项目”表格)。
https://stackoverflow.com/questions/16144030
复制相似问题