【问题标题】:mysql join query problemmysql连接查询问题
【发布时间】:2010-11-24 12:53:13
【问题描述】:

我有 2 张桌子
1) 带有字段的“产品”(产品 ID PK、名称、描述、价格)
2) 带有字段(salesid PK、salestime、productid、customername、customeremail、status)的“sales”

我需要将数据以表格格式显示为

SalesID      产品名称      金额      客户名称      客户地址      付款状态

为此,我使用以下查询

SELECT s.salesid, p.name, p.price, s.customername, s.customeremail, s.status 
FROM sales s 
LEFT JOIN products p ON s.productid = p.productid 
ORDER BY salestime DESC 
LIMIT 0, 15 

有什么方法可以优化此查询以更快地运行?

【问题讨论】:

  • JOIN s 和 ORDER BY s 是您会看到速度变慢的地方,但是如果您更改了这些,您将无法按您想要的顺序取回您想要的数据。该查询对我来说看起来不错,但salestimeproduct_id 列上的索引可能有助于加快速度。此外,您可以将此查询存储为视图或存储过程吗?调用 SQL 时,服务器需要编译 SQL 代码,然后执行它。当从视图或存储过程中调用它时,它会被服务器预编译,这可以节省更多的毫秒数..

标签: mysql query-optimization


【解决方案1】:

您在表上有适当的索引吗?

看看CREATE INDEX SyntaxHow MySQL Uses Indexes

【讨论】:

  • 如果表中已经填满了数据,并且我对它们进行索引,它们不会有任何区别吗?我应该删除所有数据,然后创建索引还是有其他方法?
  • 不不不不。用表中的数据创建索引应该没问题。
【解决方案2】:

查询已尽其所能。就其性质而言,查询指定做什么,而不是如何做。

它下面的 RDMS 会影响你的性能,影响这样的查询的主要方法是为你加入的列添加索引(每个表的 oroductid)

【讨论】:

  • 取决于你想要的结果。如果对于(“左”表的)某行的两个表之间没有匹配,您是否希望这些字段与另一个表中对应的空值一起显示(左连接)?还是您只是希望它不被列出(INNER JOIN,其中 EQUI 是一种类型)?
【解决方案3】:

查询没问题。尝试在两个表中索引productid,以及salestime

【讨论】:

  • 如果表中已经填满了数据,并且我对它们进行索引,它们不会有任何区别吗?我应该删除所有数据,然后创建索引还是有其他方法?
  • 只需添加索引,它们就会索引现有数据。
猜你喜欢
  • 2013-03-27
  • 2013-03-05
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多