【问题标题】:Fast Left Joins快速左连接
【发布时间】:2013-01-26 02:02:19
【问题描述】:

我最近在 C# 应用程序中从使用本地 MySQL 实例切换到使用 Xeround MySQL 实例。因此,我注意到查询运行速度要慢得多。我目前正在运行左连接以创建一个新表,并试图将我的运行时间缩短几秒钟。

我观察到以下平均运行时间:

  • 将表创建为(选择):14 秒
  • 创建表并插入左连接:14 秒
  • 仅 SELECT 语句:9s
  • 将临时表创建为(选择):9.2 秒
  • 创建视图和检索内容:9.5 秒

目前我正在运行CREATE TABLE AS (SELECT) 语句。显然,我想减少与仅从 select 语句移动到带有 select 语句的 CREATE TABLE 相关的 5 秒溢价。使用视图似乎很有希望,但是从视图访问数据非常慢,并且不能证明这里节省的时间是合理的。使用临时表似乎也很有希望,但是按照我进行函数调用的方式,该表将在我完成访问之前被删除。我可以使用另一个关键字来告诉 MySQL 引擎获取 SELECT 语句的内容并将其放入准系统表中吗?

【问题讨论】:

  • 您确定您的表设置了索引吗?
  • 是的。这些数字来自对正在连接的字段的索引进行的测试。

标签: mysql performance left-join create-table xeround


【解决方案1】:

5 秒的延迟似乎是由将所选记录写入您的表引起的。如果可用内存允许,请尝试使用 MEMORY 引擎创建表:

CREATE TABLE myTempTable ENGINE=MEMORY AS SELECT (...)

至于与本地服务器相比性能更差(假设硬件规格相似),我建议比较每个系统上SHOW VARIABLES 的输出,尤其是那些以“innodb_”开头的变量。

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2014-07-05
    相关资源
    最近更新 更多