sql百万数量级查询并插入数据

sql百万数量级查询并插入数据

这几天在做一个从数据库中查询数据并添加到新表的程序,记录一下自己遇到的问题,和关于这个过程学习体会。

起初,在自己的电脑运行测试少量数据时候并没有太大的感受。之后放到服务器上运行时候,6个小时后代码还是没有结束。这就看出来自己的代码的问题了,所以我果断放弃原先代码,Ctrl+C,停止重新编写。

之前在CSDN,百度都查找过sql的查询优化,大多是理论,没有实践操作,作为小白的我还是不太懂,只是利用了索引进行了一部分优化。下面是我的改良操作过程。

以一个代码为例:

INSERT INTO temporary_table_us(C1,C2 ,C3 ,C4 ,C5 ,C6 ,C7 ,C8 ,C9 ,C10 ,C11 ,C12 ,C13 ,C14 ,C15 ,C16 ,C17 ,C18 ,C19 ,C20 ,C21 ,C22 ,C23 ,C24 ,C25 ,C26 ,C27 ,C28 ,C29 ,C30 ,C31 ,C32 ,C33 ,C34 ,C35 ,C36 ,C37 ,C38 ,C39 ,C40 ,C41 ,C42 ,C43 ,C44 ,C45 ,C46 ,C47 ,C48 ,C49 ,C50 , C51 ,C52 ,C53 ,C54 ,C55 ,C56 ,C57 ,C58 )
    SELECT C1,C2,C3 ,C4 ,C5 ,C6 ,C7 ,C8 ,C9 ,C10 ,C11 ,C12 ,C13 ,C14 ,C15 ,C16 ,C17 ,C18 ,C19 ,C20 ,C21 ,C22 ,C23 ,C24 ,C25 ,C26 ,C27 ,C28 ,C29 ,C30 ,C31 ,C32 ,C33 ,C34 ,C35 ,C36 ,C37 ,C38 ,C39 ,C40 ,C41 ,C42 ,C43 ,C44 ,C45 ,C46 ,C47 ,C48 ,C49 ,C50 , C51 ,C52 ,C53 ,C54 ,C55 ,C56 ,C57 ,C58 
    from `20200402.export` 
    where C6='CHN' and C52='us' and C4 in ('2015','2016','2017','2018','2019','2020');

在这里插入图片描述
可以看到从一个2000行的表里查出233行,用时665ms,左右,时间好像也不是特别长,但是我是需要从5*365个这样的表,查询100次的,那查询的总时间需要近30个小时,这时间真是太长了,无法忍受!!!

所以我尝试了建立索引:
在这补充说明一下索引的作用,索引可以理解为数组a的下标,通过索引可以直接找到对应的位置,不用直接进行全局扫描,因此加快了查询,因为在where 语句判断的时候,比如说查找a中值为’us’,索引可以直接将’us’变成下标,直接通过a[i],找到对应内容

CREATE INDEX testIndex
ON  `20200402.export`(C4(4), C6(3), C52(2));

建立索引后查询时间呢
sql百万数量级查询并插入数据_第1张图片
时间缩短了1/30,那也就是说我一个多小时就可以执行完我的查询部分。
当然这只是缩小了一点点时间,还要注意避免使用 in 改成个子表的union操作等等
其他需要注意的一些事项可以参考下面连接,我觉得很全。

百万查询优化

你可能感兴趣的:(学习记录,sql,mysql,数据库)