MySQL组合索引
MySQL组引合索优化SQL
我的场景 200w左右的数据,后面会更多
使用定时任务爬取数据插入到自己的数据库。要保证数据的唯一性,所以我用了组合唯一索引。
表结构

最初的组合索引

SQL执行和explain


由于对索引的知识了解的不多,后来了解到由于组合索引的最左原则导致该索引在这个SQL查询的时候是没什么效果的。
根据explain得知,我的查询类型是index类型的,index类型 Full Index Scan。会扫描所有的索引,比它差的就只有全文扫描了~~!
最左原则
复合索引在建立的时候比如 UNIQUE KEY un_key (a,b,c)
实质上等于创建了三个索引
a
a,b
a,b,c
where条件是 a a,b a,b,c的时候会用到索引 type=ref 扫描的行数会很少
where条件是 a,c的时候,只有a会用到索引,c不会 type=ref 但是扫描的行数会比较多
where条件是 b,c的时候,则会扫描全部索引 type=index
根据最左原则,我修改了索引顺序
修改索顺序后SQL语句执行

阿里巴巴Java开发手册中的索引规约 SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts
最好。
这里已经达到了ref级别 扫描的行数等于查询出来的数据量,key的长度降低了三分之一。查询性能已经很好了


MySQL组合索引的更多相关文章
- mysql 组合索引
MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习. 为了形象地对比两者,再建一个表 ...
- 【转】MYSQL数据库四种索引类型的简单使用--MYSQL组合索引“最左前缀”原则
MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...
- mysql组合索引之最左原则
为什么在单列索引的基础上还需要组合索引? select product_id from orders where order_id in (123, 312, 223, 132, 224); 我们当然 ...
- mysql组合索引与字段顺序
很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符. 看下面的例子:假设有一 ...
- [转]mysql组合索引与字段顺序
下列转自:http://www.tech-q.cn/archiver/tid-11673.html 很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引!一般来说,可能是 ...
- MySQL组合索引最左匹配原则
几个重要的概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. 2.对于多列索引来说(a,b,c)其相当于3个索引(a),(a,b),(a,b,c)3个索引,又 ...
- mysql组合索引的有序性<转>
昨天同事关于军规里的一条mysql索引的问题咨询我,才发现自己也不太了解组合索引的规则.于是来记录一下: [推荐]如果有order by的场景,请注意利用索引的有序性.order by 最后的字段是组 ...
- mysql组合索引顺序参考
问题背景 : 当我们需要创建一个组合索引, 索引的顺序对于效率影响很大, 怎么确定索引的顺序; 解决方法 : 我们应该依据字段的全局基数和选择性, 而不是字段的某个具体的值来确定; 表结构 : dc ...
- MySQL单列索引和组合索引的区别介绍
MySQL单列索引和组合索引的区别介绍 作者:佚名出处:IT专家网2010-11-22 13:05 MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有 ...
- [转]MySQL单列索引和组合索引的区别介绍
FROM : http://database.ctocio.com.cn/353/11664853.shtml MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引 ...
随机推荐
- 使用IDEA中的Git提交代码到错误的分支,回滚代码后如何强制push代码-2022新项目
一.问题由来 当前新项目的开发分支非常的多,自己看了一下大概有20多个分支.每次开发完一个版本就会重新创建几个新的分支,每个开发人员对应一个 自己单独的开发分支,因此才会出现这么多的分支.分支多了之后 ...
- trans.bat 将.m4a 文件拖拽到这个上面 自动转换成.mp3 老歌精选-歌曲z
@chcp 65001 >nul echo off :: 获取文件名 SET filePath=%1 :: 因为这里目录的路径是 E:\老歌精选-歌曲z 是11个字符,所以是从第12个字符到最后 ...
- setting.json 20210825 更新
vue代码格式化思路 { "pasteImage.path": "${currentFileNameWithoutExt}_Images/", "up ...
- Pandas导出美化技巧,让你的Excel更出众
pandas的DataFrame可以通过设置参数使得在jupyter notebook中显示的更加美观,但是,将DataFrame的数据导出excel时,却只能以默认最朴素的方式将数据写入excel. ...
- 基于ESP8266的JSON解析实例分析
什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.采用完全独立于编程语言的文本格式来存储和表示数据.其简洁和层次结构清晰的特点使得 J ...
- K8S-1.23.17+Ceph+KubeSphere 一主二从部署攻略
K8S部署攻略 此教程以一主二从为例,需要三台服务器. 主机最低需求: 4 核 CPU,4 GB 内存,硬盘:20 GBx2 (需保留一个未分区的磁盘) 从机最低需求: 4 核 CPU,8 GB 内存 ...
- HISI3520DV300 折腾记录(三)之《终篇》
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 记录--一道字节面试题引出的this指向问题
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 var length = 10; function fn () { return this.length + 1; } var obj = ...
- .NET Emit 入门教程:第二部分:构建动态程序集(追加构建静态程序集教程)
前言: 在本部分中,我们将深入探讨如何使用C# Emit 来创建动态程序集. 动态程序集是在运行时生成的,为我们提供了一种灵活.动态地构建和加载程序集的能力. 1. 程序集的概念 程序集是.NET中的 ...
- docker相关命令杂理
- 2020.11.16docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] #保存现有的镜像 # docker commit -a "r ...