Mysql索引和性能优化

使用索引的原则 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语句,会先执行哪一块? 执行的原理是什么?

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语句执行的逻辑是这样的 第一步: 将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执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2017-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

【深入浅出jQuery】源码浅析--整体架构

1023
来自专栏沃趣科技

MySQL排序内部原理探秘

一、我们要解决什么问题 二、排序,排序,排序 三、索引优化排序 四、排序模式 4.1实际trace结果 4.2排序模式概览 4.2.1回表排序模式 4.2.2不...

3056
来自专栏JavaWeb

Mysql索引原理深入剖析

3053
来自专栏Ryan Miao

java中byte, iso-8859-1, UTF-8,乱码的根源

Post@https://ryan-miao.github.io 测试代码https://github.com/Ryan-Miao/someTest/comm...

3406
来自专栏java达人

sql server 获取每一个类别中值最大的一条数据

数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三...

1649
来自专栏Python

flask-sqlalchemy中Datetime的创建时间、修改时间,default,server_default,onupdate

记录第一次创建时间,default falsk中如下两个字段 create_time1 = db.Column(db.DateTime, default=dat...

3784
来自专栏Python爬虫实战

MySQL 从零开始:04 表的增删改查

在上一小节中介绍了 MySQL 数据库的一些最最最基础的入门级也是必须要掌握的10条语句,本节将继续深入学习 MySQL 的增删改查语句。本节讲的增删改查是相对...

651
来自专栏诸葛青云的专栏

C语言初学者必须掌握的关键字!

其实小伙伴在写代码的时候,关键字还是用的比较多的,老九主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图。

30
来自专栏xingoo, 一个梦想做发明家的程序员

堆 栈-相关知识

一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量...

1698
来自专栏技术博客

C#项目代码规范

   小菜就是小菜,几个人搞出来的项目,让公司大牛稍微看了下,最后送出了惨不忍睹四个字。命名各种各样,五花八门,大写英文、小写英文、大写拼音、小写拼音、英文和拼...

604

扫描关注云+社区