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

相关文章

来自专栏王亚昌的专栏

Shell小结

1.数字计算 declare -i num=10 while [ $num -ne 0] do  num=num-1 done

793
来自专栏Java学习123

原 Java中计算程序运行耗时的方法对比

1713
来自专栏奇梦博客

Xiuno插件开发,Hook 机制说明 PHP 插件 XiunoBBS

Xiuno BBS 的插件机制分为两种,一种是 Hook,一种是 Overwrite。所谓 Hook,就是往代码里插入代码,多个插件的代码合并后插入到 hook...

1152
来自专栏恰同学骚年

《T-SQL查询》读书笔记Part 3.索引的基本知识

索引优化是查询优化中最重要的一部分,索引是一种用于排序和搜索的结构,在查找数据时索引可以减少对I/O的需要;当计划中的某些元素需要或是可以利用经过排序的数据时,...

933
来自专栏青枫的专栏

用gcc编译c语言程序以及其编译过程

对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!!

651
来自专栏salesforce零基础学习

salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表。 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点...

1899
来自专栏北京马哥教育

Linux Bash脚本15分钟进阶教程

这里的技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT)。这里是一个修订和扩增版本。

480
来自专栏Pythonista

redis学习

集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

964
来自专栏维C果糖

史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此唯一键就是用来解决表中多个字段需要具有唯一性的问题。

3285
来自专栏Python

logging模块

logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info...

1897

扫码关注云+社区