相关疑难解决方法(0)

如何进一步优化派生表查询,该查询的性能优于JOINed等效项?

更新:我找到了解决方案.请参阅下面的答案.

我的问题

如何优化此查询以最大限度地减少停机时间?我需要更新50多个模式,门票数量从100,000到200万不等.是否可以尝试同时在tickets_extra中设置所有字段?我觉得这里有一个解决方案,我只是没有看到.我一直在打击这个问题超过一天.

另外,我最初尝试不使用子SELECT,但表现得太多比我现在有更坏.

背景

我正在尝试优化我的数据库以获取需要运行的报告.我需要聚合的字段计算起来非常昂贵,因此我对现有模式进行了非规范化以适应此报告.请注意,通过删除几十个不相关的列,我简化了故障单表.

我的报告将按创建时管理器解析后管理器聚合票证计数.这个复杂的关系如下图所示:

EAV http://cdn.cloudfiles.mosso.com/c163801/eav.png

为了避免在运行中计算这个需要的六个令人讨厌的连接,我已经将以下表添加到我的模式中:

mysql> show create table tickets_extra\G
*************************** 1. row ***************************
       Table: tickets_extra
Create Table: CREATE TABLE `tickets_extra` (
  `ticket_id` int(11) NOT NULL,
  `manager_created` int(11) DEFAULT NULL,
  `manager_resolved` int(11) DEFAULT NULL,
  PRIMARY KEY (`ticket_id`),
  KEY `manager_created` (`manager_created`,`manager_resolved`),
  KEY `manager_resolved` (`manager_resolved`,`manager_created`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我没有将这些数据存储在任何地方.经理总是动态计算.我在几个数据库中拥有数百万张票,这些数据库具有需要填充此表的相同模式.我希望以尽可能高效的方式执行此操作,但是在优化我正在使用的查询时未能成功:

INSERT INTO tickets_extra (ticket_id, manager_created)
SELECT
  t.id, 
  su.user_id …
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization derived-table query-optimization

21
推荐指数
1
解决办法
8012
查看次数

如何优化这个MySQL慢(非常慢)的查询?

我有一个2 GB的mysql表,行500k行,我在没有负载的系统上运行以下查询.

select * from mytable 
where name in ('n1', 'n2', 'n3', 'n4', ... bunch more... ) 
order by salary
Run Code Online (Sandbox Code Playgroud)

它需要一个文件存储,并在50到70秒之间完成.

按工资删除订单并在应用程序中进行排序时,总运行时间(包括排序)减少到大约25-30秒.但那仍然太过分了.

知道如何加快速度吗?

谢谢.

mysql optimization

3
推荐指数
1
解决办法
587
查看次数