2013-04-22 27 views
0

我有一个包含2个字段的产品表。整数与字符串字段MySQL设计方法的PHP网络

1)的产品INT-7digits的ID

2)产品的名称

产品的名称只能像香蕉27个不同的值,苹果等

查阅即时知道我的网络服务器资源的最佳方法是什么? 我的意思是我应该使用1,2,3,...值或字符串值?

〜编辑我的表格大约100万行,并随着时间的推移稳步增加。

+0

_Now即时通讯想知道什么是我的网络服务器资源的最佳方法。我的意思是我应该使用1,2,3,......值或字符串值?_在哪个字段中......“产品名称”? – 2013-04-22 09:50:07

+0

该方法取决于该领域的用法..无论你想获取的价值和打印到某处或只是需要一些比较或类似kinda的事情..希望你有点.. – 2013-04-22 09:51:56

+0

你可以使用“ENUM”类型,如果你知道27个确切的值 – Shin 2013-04-22 09:59:42

回答

1

为了便于阅读,您应该使用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领域,以及。您在数据库端获得的任何性能在应用程序端将丢失五倍。

+0

可读性在这里不是我的问题,它有点正确,但这将是一次性的工作,所以我不会读取值,但服务器会做。我会对我的资源有任何实际利益吗? – Incognito 2013-04-22 09:53:52

+0

@Incognito在执行SELECT时,MySQL比通过数组中的int查找分配字符串要快得多。您在SQL方面获得的任何性能在PHP方面将会丢失五倍。 (虽然,你认为整数比较比字符串比较快) – 2013-04-22 09:55:00

+0

非常感谢你的回答,你是对的,它会慢,因为PHP将不得不分配值。 – Incognito 2013-04-22 10:04:38

1

使用VARCHAR。

或者,如果您完全确定产品将保持静态,您可以使用ENUM来节省一些空间,但是只有27行没有足够的空间来保存。但是,如果需要引用其他表中的产品,请考虑创建一个surrogate key(自动递增整数),以节省引用表中的空间(与重复VARCHAR产品名称或7位产品ID相比)。

注意:“节省空间”不仅仅是存储空间 - 更小的数据意味着更少的I/O,并且对于给定数量的RAM来说更有效的缓存。这对于小型表格来说并不重要,但可以在大型表格上有所作为(例如,如果您有一个引用产品的大“订购商品”表格)。

+0

是的,在我看来,Enum似乎是一个更好的选择。 – Incognito 2013-04-22 10:09:29