高性能MySQL第三本笔记总结(上)

2019-05-27  本文已影响0人  codeing_java

MySQL锁的粒度

表锁(table lock)

行级锁(row lock)

MySQL的事务

事务特性

事务的隔离级别

MySQL中的事务

多版本并发控制MVCC

在可重复读(REPEATABLE READ)隔离级别下,MVCC具体是如何操作的。

SELECT查询操作时

InnoDB会根据以下两个条件检查每行记录:

INSERT

DELETE

UPDATE

数据库存储引擎

InnDB存储引擎

MyISAM引擎

Archive引擎

Blackhole引擎

CSV引擎

Federated引擎

Memory引擎

Schema(数据库的组织和结构)与数据类型优化

更小的通常好

简单就好

尽量避免NUll

datetime和timesamp

字段列的类型选择

使用inet_aton和inet_ntoa处理ip地址数据

总结

创建高性能的索引

索引基础

索引的选择策略

Inndb主键索引和非主键索引的区别

索引覆盖

理想的索引

select count(distinct left(word,6))/count(*) from dict;

使用索引扫描来做排序

重复索引与冗余索引

索引和锁

查询性能优化

优化数据库访问

重构查询的方式

Mysql中驱动表的概念

比如如下测试的sql,Table1表的FilterID字段建了索引


select t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1

STRAIGHT_JOIN 方式改写驱动表

select t1.*
from Table1 t1
STRAIGHT_JOIN  Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1

排序优化

优化COUNT查询

# 改查询需要扫描474条行数
EXPLAIN select count(*)  from  system_log20190401000001 where id >5;

# 将条件反转一下,先查询id<5的数据,然后利用总数去做减法也能得到结果 
EXPLAIN select (select count(*)  from  system_log20190401000001)-count(*) from system_log20190401000001  where id <=5;

优化limit分页

优化UNION查询

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

# UNION ALL
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
上一篇 下一篇

猜你喜欢

热点阅读