mysql 8.0 Windows 版本。
tb_quote (
op_date ,
code ,
price ,
ratio ,
hsl ,
index unique idx_1 (op_date,code) ,
index idx_2(code)
)
每个交易日 6000 条,一年几百万条规模。
实现语句很简单:
方案一: 第一条语句在 1 秒内返回结果:(20 条记录)
select code from tb_quote where op_date='yyyy-mm-dd' and ratio >3 and ratio <5 and hsl>5 and hsl <10
嵌套第二条后:
select a.* from tb_quote a join (
select code from tb_quote b where op_date='yyyy-mm-d1' and ratio >3 and ratio <5 and hsl>5 and hsl <10 ) t
on a.code=t.code and a.op_date='yyyy-mm-d2'
执行时间就超过 1 分钟!
** 查看 mysql 解释: **
** 方案二: ** 但是如果把第一条语句的结果保存在一个表 tmp 里面,并且 code 建立普通索引以后,变成:
select a.* from tb_quote a join (
select code from tmp ) t
on a.code=t.codeand a.op_date='yyyy-mm-d3'
执行时间不超过 1 秒!!!
** 查看 mysql 解释:**
发现差别在:
不知道 mysql 是怎么优化的?如果不用中间表过渡的话,应该怎么写 sql ?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.