哪一个更快?输入每行的类别ID或使用关系表

时间:2014-01-13 19:19:35

标签: php mysql select table-relationships

我使用php和Mysql数据库。 哪一种是从数据库中选择数据的更快方式

  1. 输入类别 id / * 名称 *到产品表的每一行,然后 select * from product table WHERE category name = something
    1. 创建关系表,先在此表中搜索,然后选择 来自产品表的匹配结果
    2. 以及ID或NAME怎么样?是否有必要搜索ID,然后将其转换为NAME 哪种方式更好?

      1. 使用php将类别ID转换为类别名称
      2. 使用category-name表将id转换为类别名称
      3. 从产品表
      4. 中的prosuct行中获取类别名称

4 个答案:

答案 0 :(得分:3)

除非有明显的性能原因,否则您应该坚持规范化的数据库设计。在您的特定情况下,重复类别名称可能会导致性能下降,因为您最终会得到一个更大的表,并且必须比较字符串而不是4或8字节整数。

答案 1 :(得分:1)

如果没有先做一些重要的测量,请不要担心“最快”。

不要担心最快,而要考虑哪种方式最清楚。

特别是在数据库中,请考虑哪种方法可以保护您免受数据错误的影响。

如果程序错误或给出错误的答案,那么程序的速度并不重要。

答案 2 :(得分:0)

理想情况下,您将为类别构建一个表,然后使用product表中该表的主键(id字段)作为category_id。然后,您仍然可以在category_id字段上进行搜索,但它更接近于规范化,您可以使用比尝试索引文本字段更好的性能结果索引整数字段。

答案 3 :(得分:0)

拥有一个列出名称的单独类别表会更快。您将类别ID放在产品表中,该类别对应于类别表中的相同类别ID。您不需要“在此表中搜索”。你只需使用连接:

SELECT product_table.*, category_table.CategoryName 
FROM product_table
INNER JOIN category_table ON category_table.CategoryID = product_table.CategoryID
WHERE CategoryName = ?

如果您可以按CategoryID而不是CategoryName进行选择,那么它会更快,因为CategoryID将是您的主键。