我有一个包含2个字段的产品表。整数与字符串字段MySQL设计方法的PHP网络
1)的产品INT-7digits的ID
2)产品的名称
产品的名称只能像香蕉27个不同的值,苹果等
查阅即时知道我的网络服务器资源的最佳方法是什么? 我的意思是我应该使用1,2,3,...值或字符串值?
〜编辑我的表格大约100万行,并随着时间的推移稳步增加。
我有一个包含2个字段的产品表。整数与字符串字段MySQL设计方法的PHP网络
1)的产品INT-7digits的ID
2)产品的名称
产品的名称只能像香蕉27个不同的值,苹果等
查阅即时知道我的网络服务器资源的最佳方法是什么? 我的意思是我应该使用1,2,3,...值或字符串值?
〜编辑我的表格大约100万行,并随着时间的推移稳步增加。
为了便于阅读,您应该使用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');
分配值将使用更多的开销比一个MySQL SELECT
声明一个VARCHAR
领域,以及。您在数据库端获得的任何性能在应用程序端将丢失五倍。
使用VARCHAR。
或者,如果您完全确定产品将保持静态,您可以使用ENUM来节省一些空间,但是只有27行没有足够的空间来保存。但是,如果需要引用其他表中的产品,请考虑创建一个surrogate key(自动递增整数),以节省引用表中的空间(与重复VARCHAR产品名称或7位产品ID相比)。
注意:“节省空间”不仅仅是存储空间 - 更小的数据意味着更少的I/O,并且对于给定数量的RAM来说更有效的缓存。这对于小型表格来说并不重要,但可以在大型表格上有所作为(例如,如果您有一个引用产品的大“订购商品”表格)。
是的,在我看来,Enum似乎是一个更好的选择。 – Incognito 2013-04-22 10:09:29
_Now即时通讯想知道什么是我的网络服务器资源的最佳方法。我的意思是我应该使用1,2,3,......值或字符串值?_在哪个字段中......“产品名称”? – 2013-04-22 09:50:07
该方法取决于该领域的用法..无论你想获取的价值和打印到某处或只是需要一些比较或类似kinda的事情..希望你有点.. – 2013-04-22 09:51:56
你可以使用“ENUM”类型,如果你知道27个确切的值 – Shin 2013-04-22 09:59:42