添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
statjiankong_etl a left join ibnr b on a.anadate = b.anadate and a.STARTYEAR = b.startyy and a.comcode2 = b.comcode2 and a.centercode = b.centercode and a.BUSINESSTYPECODE = b.BUSINESSTYPECODE and (case when a.kindclass = 'BZ' then '01' else '02' end) = b.riskcode left join jinxiangshui c on a.comcode2 = c.comcode2 and (case when a.kindclass = 'BZ' then '01' else '02' end) = c.riskcode where a.anadate = '201908';

根据这个sql,没加索引的话执行计划是这样的。

因为a表按照anadate分区,所以只扫描了条件的分区,剩下的都是全表扫描,意料之中。但是执行时间实在是太长了,我提交之后,运行了差不多一个小时,还没有结果,我给停了...

然后我就开始分析,该怎么加索引才能查询更快。

因为和a表的关联条件有多个,所以我首先想到的是组合索引。我知道组合索引有最左原则,但是我有一个条件是我的分区字段,所以我就把它跳过了,我觉得多数对索引不了解的同学都会是这个思路。

跳过那个字段之后,我把a表的关联条件建了个组合索引,然后执行计划是这样的。毫无变化。

后来我又给小表加了索引。

果然,小表加完索引,关联的两个表立刻就走索引了。接着我把a表的分区字段也加到了组合索引里,我又重新建立了a表的索引。

这样三张表关联就完全走索引了,查询时间 缩小到了100s

上面是一个比较典型的多表关联,如何加索引的案例,持续关注,我会把我遇到的所以优化的案例一一列举,有想法的伙伴也可以直接线上交流,非常感谢你。

我是用的三张表进行关联的,一大两小。下面看一下三张表的具体结构。三张图对应三张表,然后下面是我写的查询sqlselecta.*,b.*,c.*from statjiankong_etl aleft joinibnr b on a.anadate = b.anadate and a.STARTYEAR = b.startyy and a.comcode2 =... from copy666 jee left join ga_bu ogb on jee.ga_bu_code = ogb.bu_code left join ga_coa coa on jee.ga_coa_sub = coa.sub AND jee.ga_coa_obj = coa.obj where jee.year = '2020' select * 比较慢 9w条数据就用了58s。 explain语句 1.在经常需要搜索的列上创建,可以 快搜索速度。 2.在经常使用where子句中的列上面创建, 快条件的判断速度。 3.在经常需要排序的列上面创建,因为 索引 已经排序,这样可以直接使用 索引 的排序, 快排序查询时间。 4.对于中到大型 创建 索引 都是非常有效的,但对于超大型 创建 索引 成本较大,不建议使用。 5.在经常用在连接的列上创建索
文章目录1. 什么是 索引 2. 索引 的特点3. 索引 的分类4. 索引 的设计原则5. 创建 索引 5.1. 自动创建 索引 5.2. 手动创建 索引 5.2.1. 创建 时创建 索引 5.2.2. 在已经存在的 上创建 索引 5.2.2.1. alter语句创建 索引 5.2.2.2. create语句创建 索引 6. 查看 索引 6.1. explain关键字查看 索引 6.2. show index关键字查看 索引 7. 删除 索引 7.1. alter关键字删除 索引 7.2. drop关键字删除 索引 1. 什么是 索引 索引 是一个单独存储在磁盘上的数据库结构,它们包含着对数据 里所有记录的引用指针 在数据库中, 索引 用来 速对 的查询, 索引
MySQL 关联 查询语句通常用于查询两个或多个 之间的关系。 关联 查询可以通过特定的条件将两个或多个 中的数据连接在一起,并返回符合条件的相关数据。 语法格式如下: SELECT 列名 FROM 1 INNER JOIN 2 ON 1.列名 = 2.列名; 其中,关键字 INNER JOIN 示使用内连接查询两个 ,ON 后面跟着的是连接条件,指定两个 之间的关系。在 SELECT 语句中,需要查询的列名写在 SELECT 后面。 SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; 这个查询语句用于返回订单 中的订单 ID 和客户名字。 在实际场景中,可以根据需要进行 多表 联合查询。需要注意的是,如果查询中涉及到多个 ,则需要在 JOIN 语句后面添 相应的连接条件。如果连接条件不严谨,就有可能导致结果出现重复或者漏掉符合条件的数据。 在使用 关联 查询时,还需要注意对 索引 进行优化,以避免查询速度过慢。优化方法包括对 建立 合适的 索引 、合理设计查询条件等。