【发布时间】:2017-01-29 15:43:20
【问题描述】:
我使用 PHP 和 mysql。
假设我有一个包含 10 000 行的数据库表。下面哪种情况下性能最好?
案例一
两个表,products 和 categories。
SELECT * FROM products INNER JOIN categories ON products.category_id = categories.id
产品
id
name
category_id
类别
id
name
案例 2
一个表,products,包含所有数据。
SELECT * FROM products
产品
id
name
category_name
问题
- 这些案例中哪一个的性能最好?
- 猜猜,获取具有类似结构的 10 000 行的数据需要很长时间吗?
- 其中一种情况有什么陷阱吗?
在我看来,Case 1 是“正确”的做法,但使用Case 2 会节省一些开发时间。也许还有性能?
【问题讨论】:
-
10k 行与正确的索引无关。即使有 1 亿条记录,也要使用单独的表!
-
就我的知识和经验而言,case1 更好
-
根据@juergend,您只需要在case1中使用适当的索引
-
您应该始终选择 CASE 1。从长远来看,它更具可扩展性和可维护性。数据库针对这类事情进行了优化,所以完全不用担心性能。
-
为了提高除其他 cmets 之外的性能,选择实际列而不是全部会有所帮助。如果您不需要全选,请仅选择需要的那些。不过,您可能应该在 db exchange 中发布此内容。
标签: php mysql sql performance select