Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >性能优化-如何选择合适的列建立索引

性能优化-如何选择合适的列建立索引

作者头像
cwl_java
发布于 2020-02-12 16:24:08
发布于 2020-02-12 16:24:08
2.1K00
代码可运行
举报
文章被收录于专栏:cwl_Javacwl_Java
运行总次数:0
代码可运行

3、如何选择合适的列建立索引

1、在where从句,group by从句,order by从句,on从句中的列添加索引 2、索引字段越小越好(因为数据库数据存储单位是以“页”为单位的,数据存储的越多,IO也会越大) 3、离散度大的列放到联合索引的前面

例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from payment where staff_id =2 and customer_id =584;

注意:是index(staff_id,customer_id)好,还是index(customer_id,staff_id)好 那我们怎么进行验证离散度好了?

A、我们先查看一下表结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
desc payment;

B、分别查看这两个字段中不同的id的数量,数量越多,则表明离散程度越大:因此可以通过下图看出:customer_id 离散程度大。

结论:由于customer_id 离散程度大,使用index(customer_id,staff_id)好

C、mysql联合索引

① 命名规则 :表名_字段名

1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是OR关系,加索引不起作用 4、符合最左原则

② 什么是联合索引

1、两个或更多个列上的索引被称作联合索引,又被称为是复合索引。 2、利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql中联合索引abc 使用bac_mysql 联合索引
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
全栈程序员站长
2022/09/01
1.8K0
MySQL理解索引、添加索引的原则 转
索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销。而如果采取索引,则可以根据索引指向的页以及记录在页中的位置,迅速地读取目标页进而获取目标记录。
henrylee2cn
2019/04/04
1.7K0
MySQL理解索引、添加索引的原则
                                                                            转
多个单列索引和联合索引的区别详解
背景: 为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。
全栈程序员站长
2022/09/05
1.5K0
mysql复合索引、普通索引总结
对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。下面用几个例子对比查询条件的不同对性能影响.
袁新栋-jeff.yuan
2020/08/26
2.8K0
mysql复合索引、普通索引总结
能避开很多坑的mysql面试题,你知道吗?
最近有一些朋友问我一些mysql相关的面试题,有一些比较基础,有些比较偏。这里就总结一些常见的mysql面试题吧,都是自己平时工作的总结以及经验。大家看完,能避开很多坑。而且很多问题,都是面试中也经常问到!希望能对大家的面试有一些帮助!!!
架构师精进
2019/12/15
2.1K0
mysql前缀索引 默认长度_如何确定前缀索引的长度?
Specified key ‘uniq_code’ was too long; max key length is 767 bytes.
全栈程序员站长
2022/08/31
3.6K0
面试中有哪些经典的数据库问题?
1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
MySQL轻松学
2018/08/08
1.2K0
面试中有哪些经典的数据库问题?
mysql经典面试题及答案_常见的SQL面试题
1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
全栈程序员站长
2022/09/27
7780
mysql经典面试题及答案_常见的SQL面试题
MySQL数据库建表、优化、算法、分区分库分表总结
1、因为任何有业务含义的列都有改变的可能性,主键一旦带上了业务含义,那么主键就有可能发生变更。主键一旦发生变更,该数据在磁盘上的存储位置就会发生变更,有可能会引发页分裂,产生空间碎片。
chenchenchen
2019/09/06
5.4K0
【干货】MySQL索引与优化实践
索引的目的在于提高查询效率,其功能可类比字典,通过该索引可以查询到我们想要查询的信息,因此,选择建立好的索引十分重要
搜云库技术团队
2019/10/17
8320
【图文详解:索引极简教程】SQL 查询性能优化原理
在一本厚厚的书籍的前几页,通常会有几页目录。作用是让读者可以快速找到感兴趣的章节进行阅读。 目录之所以可以快速阅读,是因为它提前进行了结构化+有序处理。
一个会写诗的程序员
2022/03/07
7460
【图文详解:索引极简教程】SQL 查询性能优化原理
MySQL的索引
MySQL的索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,成本就越高。如果表中有相关列的索引,MySQL可以快速确定在数据文件中查找的位置,而不必查看所有数据。使用索引是打开MySQL的正确方式,本篇将介绍MySQL的索引相关内容。
MySQLSE
2024/02/22
2080
MySQL的索引
Java面试中常问的数据库方面问题
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的
lyb-geek
2018/07/26
7640
Java面试中常问的数据库方面问题
Java面试中常问的数据库方面问题
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的
Spark学习技巧
2018/08/01
8270
Java面试中常问的数据库方面问题
MySQL8.0 优化器介绍(三)
为了让读者对join优化 有更深的了解,章节里的sql例子,留了一些思考和动手的问题。可能大家得到的答案会不同,但探索未知的过程,方式应该是一样的。
GreatSQL社区
2023/08/10
3660
MySQL8.0 优化器介绍(三)
MySQL-索引优化篇(2)_使用索引扫描来优化排序
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
小小工匠
2021/08/17
6600
我用对了这些场景下的索引,技术总监夸我棒
生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题
kunge
2020/06/10
4080
MySQL两表差集最佳实践
两表求差集SQL: select a.payment_id from test a left join test1 b on a.payment_id=b.payment_id where b.payment_id is null; 表test,test1克隆sakila库中的payment表,数据量16049。 一、测试总结: 1.test1决定SQL语句的性能,有索引性能最好,无索引性能最差。 2.test1表在关联条件上有索引,test表有无索引,性能相近。
朱明豪
2020/03/18
1.6K0
Mysql基础篇--面试优化数据库对象和使用技巧
可以利用order by 子句完成随机抽取某些行的功能,他的原理就是order by rand()能够数据随机排序。
小土豆Yuki
2020/06/15
7460
mysql索引abc,a=1 and c=2是否可使用索引_sql联合索引
在真实项目中,SQL语句中的WHERE子句里通常会包含多个查询条件还会有排序、分组等。
全栈程序员站长
2022/10/04
1.7K0
相关推荐
mysql中联合索引abc 使用bac_mysql 联合索引
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验