首页 > 数据库 >mysql索引和性能优化

mysql索引和性能优化

时间:2022-11-24 17:25:51浏览次数:45  
标签:语句 mysql 优化 sql 索引 形成 子句 ref

使用索引的原则

1. 如果没有唯一性要求,可以选择普通索引

2. 如果列上有唯一性要求,可以选择唯一索引

3. 如果是需要模糊搜索,建议选择全文索引

4. 如果有多个条件一起查询,可以选择组合索引

 

 

使用索引需要注意以下几点:

1. 按需使用索引

2. 索引所在的列基数越大越好 , 男女这种字段建立索引的效果并不大 ,基数很小

3.在组合索引上要注意最左原则 我们想要知道我们的sql语句写的好不好,怎么来判断?

我们先说下sql语句是怎么执行的,举个例子 select u.name i.expression from user u left join userinfo i on u.id=i.uid where u.id in (1,3,4,55,67,76) order by u.id limit 10;

 

 

这条sql语句,会先执行哪一块? 执行的原理是什么?

sql语句执行的逻辑是这样的 第一步: 将user表和 userinfo表 做笛卡尔积

1.FROM 子句对其后面的左表user和右表执userinfo行笛卡尔积, 产生虚拟表VT1

2.ON 子句对VT1中的数据根据ON的条件进行过滤,产生虚拟表VT2 问题:怎么过滤的?

3.JOIN子句 将未符合条件的保留表中的数据添加都VT2中,形成VT3

4.WHERE子句 对VT3中的数据进行WHERE条件过滤,形成VT4

5.GROUP BY 子句对VT4中的数据进行分组操作,然后形成VT5

6.CUBE | ROLLUP 子句进行操作形成VT6

7.HAVING 对VT6中的数据进行HAVING 条件过滤,然后形成VT7

8.SELECT 从VT7中选择要获取的字段,然后形成VT8

9.DISTINCT 去重数据,形成VT9

10.ORDER BY 对VT9的结果排序后,形成VT10

11.LIMIT 从VT10中取出指定的数据,形成VT11,

 

 

 

返回给用户 我们想要知道我们的sql语句写的好不好,怎么来判断?

方法一: 直接在数据库上测试,看看执行时间

方法二: explain select xxxx 查看 其中需要关注的几个参数: type 的值有多个 const:表最多有一个匹配行,const用于比较primary key 或者unique索引。eq_ref:它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY"。 eq_ref可以用于使用=比较带索引的列。 ref 对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。 range 给定范围内的检索,使用一个索引来检查行。 ref列显示使用哪个列或常数与key一起从表中选择行。 rows 显示Mysql执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引。

标签:语句,mysql,优化,sql,索引,形成,子句,ref
From: https://www.cnblogs.com/lidongm/p/16922451.html

相关文章

  • MySQL 查询
    createTABLEstudent(idintnotnullDEFAULT1,nameVARCHAR(20)notnullDEFAULT'',chineseFLOATnotnullDEFAULT0.0,englishFLOATnotnullDEFAULT0.0,math......
  • MYSQL 字段约束条件
    字段的约束条件创建表:createtablet19(idint,namevarchar(32));往表中添加数据:insertintot19(name,id)values('tom',1);#可以自定义字段顺序......
  • MySQL数据库基础3
    今日内容概要主题:字段约束条件无符号零填充非空默认值唯一值主键自增外键今日内容详细无符号零填充unsigned无符号 idintunsignedzerofill零填充......
  • MySQL数据库管理
    一、MySQL数据库管理1.1库和表库是由一个个相互联系的二维表组成的表是由一行行记录和一列列的字段组成的行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属......
  • hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新
    hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新1反向overwrite操作->解决错误的插入数据的问题。描述:​ 例如​ 学生表:student<id,name,createtime......
  • MySQL---InnoDB数据存储结构(区_段_碎片区_表空间)
    区_段_碎片区为什么要有区?为什么要有段?为什么要有碎片区?区的分类 表空间 独立表空间系统表空间......
  • 总结我的 MySQL 学习历程,给有需要的人看
    作者|慕课网精英讲师马听你好,我是马听,现在是某零售公司的MySQLDBA,身处一线的我表示有很多话要讲。我的MySQL学习历程在我大三的时候,就开始接触到MySQL了,当时我也是从......
  • mysql的配置文件和逻辑架构
    二进制日志log-bin——主从复制——log-bin=mysql-bin错误日志log-error——默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。——log-error=var/log/m......
  • mysql 表字段约束条件
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多的关系外键字段的建立多对多关系一对一关系无符号、零填充unsigned idintunsignedzerofill i......
  • MySQL数据库管理
    一、MySQL数据库管理1、库和表行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属性2、常用的数据类型int:整型float:单精度浮点4字节32位double:双精度浮点......