Mysql 优化视频的方法:

1.mysql  执行计划与索引的详解.

 

简单实用:

explain中字段详解:

一. id  列

 

二。select_type列

 

三,table 列

 

四:type 列

 

五:possible_keys列

 

 

六:key 列

 

七:key_len: 列

 

八:ref 列

 

九:rows

 

 

十: extra 列

 

 

索引的最佳的实践:

表结果:

 

最佳实践:

一。全职匹配:

二:最佳的左前缀的法则

三。不在的索隐裂的走任何操作(计算,函数,(自动or 手动) 类型转换的),会导致的

索引而转向全表扫描

四:尽量实用覆盖索引(只访问索引的索引)(索引的包含列),减少select * 语句。

五: 尽量使用覆盖索引的(只访问的索引的查询(索引的列包含的))包含全表扫表

六: mysql 在使用不等于(!=或者<>)的时候无法使用的索引的导致的全表扫描

七:is null,is not null 也 无法使用索引

八:like 按照的通配符开头的() mysql 索引的失效会变成的全表扫表扫描

九:字符串的不加单引号,索引的失效

十:少用or ,用他连接的很多的情况下的会失效

十一:  少用的or ,用他的连接的很多的情况下的索引的会失效。

 

2.SQL 优化的实践.

sql  优化的最佳的实践:

1.选择最有效率的的表连额吉的顺序,

首先的要明白的一点就是LSQL的语法顺序,和执行顺序的是不一致的,

SQL的语法顺序:

select [distinct] ..from ..[xxx join]  [on]  .. where .. group by ..

having ...[union]

order by....

 

SQL 的执行顺序:

from  ... 【xxx join】 [on] .. where .. group by .. avg() ,sum ..having 。。

select  【disinct】... order by ...

 

from 子句--执行顺序为前后的前后的往前的,从右到左。

表名(最后面的那个表名为驱动表),执行的顺序的为后前,所以数据量的

较少的尽量放后。


where 子句的--执行的顺序为自下而上的,从右到左

将可以的过滤掉大量数据的条件写在where 的子句末尾性能最优。

group by 和order by 子句执行的顺序都为左到右

 

select 子句的--少用* 号,尽量的取字段的名称,使用的列明的意味着减少消耗时间。
 

 

2.避免产生的集合

含有的多表的sql 语句的,必须指明的表的连接条件,以避免的产生的

 

group by 和order by 子句执行的从左到右边

 

 

 

3.用where 子句的替换的having 的子句。

where 子句的搜索的条件的进行的分组操作的之前引用,

而having 自己的条件的在进行的分组的操作的之后的引用。

避免的使用的having 子句,having 子句的只会在检索的所有的记录之后才对的结果进行

过滤。这个处理需要的排序,总计等操作。

 

如果的能通过的where子句的限制记录的数目,那就能减少这方面的开销。


 

5.用exists,not exists 和 in ,not in 相互 替代

原则是哪个子查询的产生的结果集合小,就选哪个

select * from t1 where x   (select y from t2)

select * from t1 where exists (select null from t2 where y=x)

IN 适合于外表大而内表小的情况,而exists 使用与外表的小而内表的大的情况

 

6.使用的exists 替代distinect

当提交一个包含一对移动的信息(比如部门表和雇员表)的查询时,避免在select子句的使用的

distinct,一般可以考虑exists,exussts使用查询更为迅速,因为子查询的条件的一旦满足,立马返回结果。

 

低效写法:

select distinct dept_no,dept_name,

from  dept d,emp e 

where d.deptno_no=e.dept_no

 

高效写法:

select deot_no,dept_name 

from dept d

where  exists

  select  'X'  from e_mp  where  e.dept_no=d.dept_no

 

备注:

其中X的意思: 因为 exists 只是看子查询的是否有返回结果返回,而不返回的的什么内容。

因此的建议的写一个常量,性能较高!

 

用exists 的确可以替代distinct ,不过的以上方案仅仅使用的dept_no 为唯一的主键的情况。

如果要去掉重复记录。

 

需要参考一下的写法:

 

select * from emp where dept_no 

exists (

select max(dept_no) from  dept d, emp   e

where   e.dept_no=d.dept_no groupy by d.dept_no

)

 

7.避免隐士数据类型

 

 

 

 

 

因此

 

 

 

3.深入mysql锁的与事务隔离界别。

 

 

 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值