有个 sql 要求按照开始时间倒序,并且 contactId 相同的情况要放在一起(相同的也按时间倒序)。这个 sql 在数据量大了之后运行 10 多秒(八万条左右),接口就超时了。尝试加索引,速度还是很慢。有啥办法能优化吗。改 sql 的话也暂时没想到其他方法能实现这功能。。
select
DISTINCT
xml.started,
xml.start_time startTime,
xml.ani,
xml.core_dnis coreDnis,
xml.core_extension coreExtension,
xml.poor,
xml.contactId,
xml.core_agentid coreAgentid,
xml.core_agentname coreAgentname,
xml.filename,
xml.end_time endTime,
xml.core_callid coreCallid,
wav.tran_failed tranFailed,
wav.sentiment_flag sentimentFlag
from
iqc_xml xml
left join iqc_wav wav on xml.filename = wav.filename
where ##字段条件筛选##
ORDER BY
MAX(xml.start_time) OVER (PARTITION BY xml.contactId) DESC,
xml.contactId, xml.start_time DESC
EXPLAIN:
|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|
|1|SIMPLE|xml||ALL|||||134595|100.0|Using temporary; Using filesort|
|1|SIMPLE|wav||ref|idx_filename|idx_filename|1023|xml.filename|1|100.0||
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.