【问题标题】:Optimize LEFT JOINS ORDER BY on multiple varchar columns在多个 varchar 列上优化 LEFT JOINS ORDER BY
【发布时间】:2010-09-04 10:44:44
【问题描述】:

我尝试优化对多个 varchar 列进行排序的 MySQL 查询:

SELECT *
FROM tickets
LEFT OUTER JOIN customers ON customers.id = tickets.customer_id
LEFT OUTER JOIN locations ON locations.id = tickets.location_id
ORDER BY customers.name, locations.name;

对于一个包含约 6000 张票、约 40 位客户和约 400 个地点的小型数据库,ORDER BY 语句似乎要花费大量时间(约 100 毫秒)。

我已经减少了 varchar 列的长度,这显着加快了查询速度(快了 2 倍)。

你们有什么办法可以优化查询执行时间吗?

非常感谢!

【问题讨论】:

  • 你有关于 customer.name 和 locations.name 的索引吗?如果没有,请添加它们并检查这将如何加快您的查询速度

标签: mysql performance sql-order-by left-join


【解决方案1】:

您应该在 customers.namelocations.name 列上有索引。

此外,确保 customers.idtickets.customer_idlocations.idtickets.location_id 都已编入索引。

【讨论】:

  • ids被索引,执行时间在“CREATE INDEX name ON customers(name)”和“CREATE INDEX name ON locations(name)”之后是一样的。奇怪吗?
  • “ORDER BY customers.name,locations.name”不在同一个表中,不应该避免文件排序和临时表,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
相关资源
最近更新 更多