-1

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

  1. 在product表的每一行 输入category id /* name *,然后select * from product table WHERE category name = something

或者

  1. 做一个关系表,先在这个表中搜索,然后从产品表中选择匹配的结果

ID 或 NAME 呢?是否有必要搜索 ID,然后将它们转换为 NAME,哪种方式更好?

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

4 回答 4

3

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

于 2014-01-13T19:25:37.123 回答
1

如果没有先进行某种重要的测量,请不要担心“最快”。

与其担心最快,不如考虑哪种方式最清晰。

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

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

于 2014-01-13T19:27:31.913 回答
0

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

于 2014-01-13T19:27:38.117 回答
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 将是您的主键。

于 2014-01-13T19:28:00.967 回答