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 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

PostgreSQL中的查询简介

数据库是许多网站和应用程序的关键组成部分,是数据在互联网上存储和交换的核心。数据库管理最重要的一个方面是从数据库中检索数据的做法,无论是临时基础还是已编码到应用...

1003
来自专栏java达人

join和where区别以及各类join的示例

1 WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接...

19710
来自专栏维C果糖

史上最简单的 MySQL 教程(三十一)「子查询(上)」

子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句。

4285
来自专栏杨建荣的学习笔记

Oracle和MySQL竟然可以这么写这样的SQL?(r12笔记第99天)

今天看到Franck Pachot‏ 发了一个Twitter,意思是Oracle里的SQL还能这么写。猛一看确实让人有些意外。 ? 禁不住诱惑,自己也尝试了一番...

2865
来自专栏芋道源码1024

数据库[分库分表]中间件 Sharding-JDBC 源码分析 —— SQL 解析(五)之更新SQL解析

本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. UpdateStatement 3. #parse() 3.1 #skipBet...

3147
来自专栏杨建荣的学习笔记

MySQL和Oracle行值表达式对比(r11笔记第74天)

行值表达式也叫作行值构造器,在很多SQL使用场景中会看到它的身影,一般是通过in的方式出现,但是在MySQL和Oracle有什么不同之处呢。我们做几个简单的测试...

3358
来自专栏PHP在线

性能调优之MYSQL高并发优化

一、数据库结构的设计 表的设计具体注意的问题: 1、数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询...

4317
来自专栏后端技术探索

一次非常有意思的sql优化经历

发现没有用到索引,type全是ALL,那么首先想到的就是建立一个索引,建立索引的字段当然是在where条件的字段。

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

oracle数据结构

 数据类型: 1 字符数据:CHAR VARCHAR NCHAR NVARCHAR2 LONG CLOB NCLOB  2 数字数据类型:NUMBER 唯一用来...

2076
来自专栏沃趣科技

统计信息查询视图|全方位认识 sys 系统库

在上一篇《会话和锁信息查询视图|全方位认识 sys 系统库》中,我们介绍了如何使用 sys 系统库总的视图来查询会话状态信息以及锁等待信息,本期的内容先给大家介...

1280

扫码关注云+社区