MySQL索引优化(超详细)

Mysql索引优化

1 索引介绍

1.1 什么时MySQL的索引

​ MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。
​ MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。
​ 简单理解为“排好序的可以快速查找数据的数据结构”。

1.2 索引数据结构

1.⼆叉树查找

​ 我们都学过⼆分查找,如果我们⼀开始在插⼊数据就将数据按顺序排列,那查找效率就会⼤⼤提⾼。将数据按照顺 序⼆叉树排列好每次查询就可以使⽤⼆分法即从根节点出发,查询效率就增加了

image-20230510170457449

但是如果删除了⼀些数据⽐如0,6,1,3,4删除了那么右边的数据就有变成了线性的了,查询效率就会有所浪 费

image-20230510170509932

2 平衡二叉树

​ 如果有这样⼀棵树左右⼦树⾼度差不超过 1,⽽且也满⾜顺序排列就可以继续⾼效下去,然后平衡⼆叉树就出现 了。每当删除⼀个节点都应该发⽣相应的节点位置转换反转保证⼆叉树的平衡。

image-20230510170647274

​ 说了这么多我们⽆⾮就是想让查找效率变高,从线性的 O(n) 到 O (logn),好像还有疑问为什么不⽤更⾼效的 Hash 地址法来查找呢?这样可以降到 O(1),答案是在查询过程中我们不仅有等值查询还有范围查询 模糊查 询,使⽤ Hash 存储其位置的不确定性,如果要查询 范围我们就要遍历全表。⽽⼆叉树只要遍历左右节点。

3.B树

​ 由于平衡⼆叉树的⼆叉特点,它每⼀个节点最多只有 2 个叉,假设有 100000 个数据,那么树的深度将会变得特别 深,⽽每次⽐较就是拿⽐较的树和节点上的数在内存⽐较,所以每⽐较⼀次就是⼀次 IO 操作就下降⼀层,层数越 多时间就越久。所以B树就来了,他是多叉平衡树,每个节点维护了多个⽐较范围(即⼦节点)

image-20230510170729722

​ 这样就降低了⾼度,每个圆圈可以理解为⼀⻚,16kb的数据. 所以他的每个节点都存储数据就会造成每个结点的分 叉数减少,⽽且会造成先靠近根节点的先查到,靠近叶⼦结点的后查到。同样范围查找也会出现多次回退到⽗节点 在到另⼀个兄弟节点的低效率问题。

4.B+树

​ 我们改造⼀下 B树 为 B + 树 ,每个⾮叶⼦节点只存索引,真实数据都存在叶⼦节点,这样⾮叶⼦节点的空间 单个 数据空间 减少 数量即分叉就可以增⼤。每次查询⽆论如何必须遍历到叶⼦节点才会结束,这样深度⼜减少了,同 时我们把每个叶⼦结点⽤双向链表连接起来,范围查询就更快。

image-20230510170819803

1.3 索引优势

​ 提高数据检索的效率,降低数据库的Io成本。
​ 通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

1.4 索引劣势

​ 索引实际上也是一张表,保存了主键和索引的字段,并且指向实体表的记录,所以索引也索引实际上也是一张表,保存了主键和索引的字段,并且指向实体表的记录,所以索引也是需要占用空间的。在索引大大提高查询速度的同时,却会降低表的更新速度,在对表进行数据增删改的同时,MySQL 不仅要更新数据,还需要保存一下索引文件。每次更新添加了的索引列的字段,都会去调整因为更新带来的减值变化后的索引的信息。

1.5 索引使用场景

哪些情况需要创建索引:

1.主键自动建立唯一索引

2.频繁作为查询条件的字段应该创建索引(where后面的语句)

3.查询中与其它表关联的字段,外键关系建立索引

4.多字段查询下倾向创建组合索引

5.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

6.查询中统计或者分组字段

那些情况不推荐建立索引:

1.表记录太少

2.经常增删改的表

3.where条件里用不到的字段

1.6 索引分类

1.6.1 主键索引

1.表中的列设定为主键后,数据库会自动建立主键索引。

2.单独创建和删除主键索引语法:

​ 创建主键索引语法:! alter table表名add primary key (字段);

​ 删除主键索引语法: alter table表名drop primary key;

1.6.2 唯一索引

1.表中的列创建了唯一约束时,数据库会自动建立唯一索引。

2.单独创建和删除唯一索引语法:

​ 创建唯一索引语法: alter table表名add unique索引名(字段);

​ 或create unique index索引名on表名(字段);

​ 删除唯一索引语法: drop index索引名on表名;

1.6.3 单值索引

即一个索引只包含单个列,一个表可以有多个单值索引。

1.建表时可随表一起建立单值索引

2.单独创建和删除单值索引:

​ 创建单值索引: alter table 表名 add index索引名(字段);

​ 或create index 索引名 on 表名(字段);

​ 删除单值索引: drop index索引名on表名;

1.6.4 复合索引

即一个索引包含多个列

1.建表时可随表一起建立复合索引

2.单独创建和删除复合索引:

​ 创建复合索引: create index 索引名 on 表名(字段1,字段2);

​ 或alter table表名 add index索引名(字段,字段2);

​ 删除复合索引: drop index索引名 on 表名;

案例
-- 创建customer表并创建四种索引
create table customer(
	id int(10) auto_increment,
	customer_no varchar(20),
	customer_name varchar(20),
	primary key(id),
	unique idex_customer_no (customer_no),
	key idx_customer_name (customer_name),
	key indx_customer_no_name (customer_no,customer_name)
);

image-20230510172749035

单独创建

-- 创建主键索引
alter table customer add primary key(id);
-- 删除主键索引
alter table customer drop primary key;

-- 创建唯一索引
alter table table customer add unique idx_customer_no (customer_no);
-- 删除唯一索引
drop index idx_customer_no on customer;

-- 创建单值索引
alter table customer add index idx_customer_name(customer_name);
-- 删除单值索引
drop index idx_customer_name on customer;

-- 创建复合索引
alter table customer add index idx_customer_no_name(customer_no,customer_name);
-- 删除复合索引
drop index idx_customer_no_name on customer;
1.7 索引测试
-- 创建存储过程
create procedure insert_person( in max_num int(10))
begin
	declare i int default 0;
	set autocommit = 0;
	repeat
	set i = i +1;
	insert into person (PID,PNAVE,PSEX,PAGE ,SAL) values (i,concat('test ' ,floor(rand()*1000)),I(RANID()0.5,'男','女'),FLOOR((RAND()*100)+10),FLOOR((RAND()*19000)+1000));
	until i = max_num
	end repeat;
	commit;
end;

-- 调用存储过程(30000000)即插入三百万条数据
call insert_person(30000000);

-- 不使用索引,根据pName进行查询(10s+)
select * from person where pname = 'test222';

-- 给pname建立索引
alter table person add index idx_pname(PNAME);

-- 再次查询(0.01s+)
select * from person where pname = 'test222';

2 性能分析

2.1 MySQL常见瓶颈

​ SQL中对大量数据进行比较,关联,排序,分组时CPU的瓶颈。

​ 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理I0。查询数据时扫描过多数据,导致查询效率低。

2.2 Explain

​ 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MYSQL是如何处理SQL语句的,可以用来分析查询语句或是表的结构的性能瓶颈。

​ 其作用:

  1. 表的读取顺序
  2. 那些索引能够使用
  3. 数据读取操作的操作类型
  4. 那些索引被实际使用
  5. 表之间的引用
  6. 每张表有多少行被优化器查询

​ EXPLAIN关键字使用起来比较简单:explain + SQL语句

– 创建四张测试表

CREATE TABLE t1(
	id INT(10) AUTO_INCREMENT,
	content VARCHAR(100),
	PRIMARY KEY(id)
);

CREATE TABLE t2(
	id INT(10) AUTO_INCREMENT,
	content VARCHAR(100),
	PRIMARY KEY(id)
);

CREATE TABLE t3(
	id INT(10) AUTO_INCREMENT,
	content VARCHAR(100),
	PRIMARY KEY(id)
);

CREATE TABLE t4(
	id INT(10) AUTO_INCREMENT,
	content VARCHAR(100),
	PRIMARY KEY(id)
);
-- 每张表中添加一条数据(拼接一个以t{{num}}__开头的1-1000的字符串)
INSERT INTO t1(content) VALUES(CONCAT('t1_',FLOOR(1+RAND()*1000)));

INSERT INTO t2(content) VALUES(CONCAT('t2_',FLOOR(1+RAND()*1000)));

INSERT INTO t3(content) VALUES(CONCAT('t3_',FLOOR(1+RAND()*1000)));

INSERT INTO t4(content) VALUES(CONCAT('t4_',FLOOR(1+RAND()*1000)));

2.3 Explain 重要字段

2.3.1 id
  • id相同时,执行顺序是从上往下

    explain select * from t1,t2,t3 where t1.id = t2.id = t3.id;
    

image-20230509141903500

  • id不同时,id的序号会递增,id的值越大优先级越高,则先被执行

    explain select t1.id from t1 where t1.id in
    (select t2.id from t2 where t2.id in
    (select t3.id from t3 where t3.id = 1)
    );
    

image-20230509142004170

  • id相同和不同都存在时,id相同的可以理解为一组,从上往下执行,所有组中,id值越大,优先级越高

    explain select t2.* from t2,(select * from t3) as s3 where s3.id = t2.id; 
    

    image-20230509142024807

2.3.2 select_type
  • SIMPLE :简单的select查询,查询中不包含子查询或者UNION

    explain select * from t1;
    

    image-20230509141831830

  • PRIMARY:查询中若包含任何复杂的子部分,最外层的查询则会被标记为PRIMARY

    explain select *from (select t1.content from t1) as s1;
    

    image-20230509141816279

  • DERIVED:在FROM列表中包含的子查询表被标记为DERIVED,MySQL会递归执行这些子查询,把结果放到临时表中

    explain select *from (select t1.content from t1) as s1;
    

  • SUBQUERY:在SELECT或者WHERE列表中包含了子查询

2.3.3 table:查询⽤到的表名
2.3.4 Type

​ ★连接的类型,常⻅的类型有(性能从好到差)

  • system:存储引擎能够直接知道表的⾏数(如 MyISAM)并且只有⼀⾏数据

    explain select * from (select t1.id from t1 where id = 1) t;
    

    image-20230509164258648

  • const:通过索引⼀次找到,通常在⽤主键或唯⼀索引时出现

     explain select id from t1 where id = 1;
    

    image-20230509164350106

  • eq_ref:⽤主键或唯⼀索引字段作为连接表条件

    explain select t1.*,t2.*
    from t1 
    join t2
    on t1.id = t2.id;
    

    image-20230509164514279

  • ref:⽤普通索引的字段作为连接表条件

    -- 创建普通索引
    alter table t1 add index idx_t1_content(content);
    -- 进行查询
    explain select *from t1 where t1.content = 'abc';
    

    image-20230509164835925

  • range:对索引列进⾏范围查询

    explain select * from t2 where t2.id > 1;
    

    image-20230509164930158

  • index:利⽤索引扫描全表

    -- 因为我们前面给t1的content字段建立了普通索引
    -- 加上主键id为主键索引,所有为查询的所有字段都有索引
    explain select * from t1;
    

    image-20230509165022676

  • all:全表扫描

    explain select * from t1 where content = '132';
    

2.3.5 possible_keys

​ 显示可能应用在这张表的索引,一个或者多个,查询涉及到的字段上如果存在索引,则该索引将会被列出来,但不一定会用到,因为存在索引失效的情况

-- 索引失效了,所以key没有使用到主键索引
explain select * from t2 where id is not null;

image-20230509170103671;

2.3.6 key

​ ★查询中实际使用的索引,如果为null,则表示没有使用索引

2.3.7 ref

​ 当使⽤索引等值查询时,与索引作⽐较的列或常量

-- t2,t3二个表的id为主键索引,查询t3的数据时用到t2的id字段
-- 所以ref为 db_test.t2.id
explain select t2.*,t3.* from t2,t3 where t2.id = t3.id;

image-20230509165611281

2.3.8 row

​ ★预计扫描的⾏数,值越⼤,查询性能越差

-- 前面的插入的三百万数据的person表
explain select * from person where sal = 111;

image-20230509165353829

2.3.9 Extra

​ ★:有关查询执⾏的其他信息

  • using index:使⽤覆盖索引,不⽤回表查询

  • using where:使⽤ where ⼦句来过滤结果集

  • using temporary:使⽤到临时表来存储中间结果,可能会导致性能问题

  • using filesort:查询需要进⾏⽂件排序操作,可能会导致性能问题

  • using index condition:先根据能⽤索引的条件获取符合条件的数据⾏,然后在根据其他条件去过滤数剧

3 查询优化

3.1 索引失效

-- 建立一张学生表
drop table if exists students;
CREATE TABLE students (
	id INT PRIMARY KEY AUTO_INCREMENT COMMENT "主键id",
	sname VARCHAR(24) COMMENT '学生姓名',
	age INT COMMENT '年龄',
	score INT COMMENT '分数',
	time TIMESTAMP COMMENT '入学时间'
 );
-- 插入四条数据
INSERT INTO students(sname,age,score,time) VALUES('小明',22,100,now());
INSERT INTO students(sname,age,score,time) VALUES('小红',23,80,now());
INSERT INTO students(sname,age,score,time) VALUES('小绿',24,80,now());
INSERT INTO students(sname,age,score,time) VALUES('小黑',23,70,now());

-- 创建sname,age,score的组合索引
alter table students add index idx_sname_age_score(sname,age,score);
-- 索引成功(查询索引字段越多,用到的索引越充分,查询越快)
explain select * from students where sname = '小明' and age = 22 and score = 100;
explain select * from students where sname = '小明' and age = 22;
explain select * from students where sname = '小明';
  • 最佳左前缀匹配原则:如果索引了多例,要遵循最左前缀原则,查询从最左前列开始并且不跳过索引中的列

    -- 索引失败
    explain select * from students where age = 22 and score = 100;
    explain select * from students where age = 22;
    
    -- 以下查询都只用到了sname索引
    explain select * from students where sname = '小明';
    explain select * from students where sname = '小明' and score = 22;
    
  • 不在索引列上做任何计算、函数操作,会导致索引失效从而转向全表扫描

    -- 函数操作
    explain select * from students where left(sname,2) = '小明';
    
    -- 不做任何计算
    explain select * from students where sname;
    
  • 存储引擎中不能使用索引中范围条件右边的列

    -- 二个查询都只使用到了snam和age索引
    explain select * from students where sname = '小明' and age > 22 and score = 100;
    explain select * from students where sname = '小明' and age = 22;
    
  • MySQL在使用不等于和is not null无法使用索引

    -- 使用了 !=
    explain select * from students where sname != '小明';
    -- 使用了 is not null;
    explain select * from students where sname is not null;
    
  • like以通配符开头会使索引失效导致全表扫描

-- 索引成功,不是以通配符开头
explain select * from students where sname like '小%';
-- 索引失效,以通配符开头
explain select * from students where sname like '%明';
  • 字符串字段不加单(双)引号
-- 字符串字段sname没有加单(双)引号
explain select * from students where sname =123;
  • 使用or连接索引失效

    -- 使用or连接索引失效
    explain select * from students where sname = '小明' or score = 22;
    

建议:

  1. 对于单值索引,尽量选择针对当前查询字段过滤性更好的索引。

  2. 对于组合索引,当前where查询中过滤性更好的字段在索引字段顺序中位置越靠前越好。

  3. 对于组合索引,尽量选择能够包含在当前查询中 where子句中更多字段的索引。

  4. 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的。

3.2 单表优化

-- 创建文章表
CREATE TABLE IF NOT EXISTS article (
id INT(10) PRIMARY KEY AUTO_INCREMENT,author_id INT(10)NOT NULL,
category_id INT(10) NOT NULL,views INT (10)NOT NULL,
comments INT(10) NOT NULL,
title VARBINARY(255) NOT NULL,content TEXT NOT NULL
);
-- 插入测试数据
INSERT INTO article(author_id,category_id,views,comments,title,content) VALUES
(1,1,1,1,'1','1'),
(2,2,2,2,'2','2'),
(3,3,3,3,'3','3');

案例

1.查询category_id为1的,且comments大于1的情况下,views最多的id和author_id的信息

-- 普通查询,没有使用到索引
explian select id,author_id
from article 
where category_id = 1 and commnts >1 order by view desc limit 1;

2.建立索引

-- 建立文章id,文章和内容的联合索引
alter table article add index idx_ccv(category_id,comments,views );

3.再次查询

-- 以为comments使用了范围查询,所以view没有使用索引查询
explian select id,author_id
from article 
where category_id = 1 and commnts >1 order by view desc limit 1;

4.再次优化

-- 删除组合索引中的comment字段
drop index idx_ccv on article;
alter table article add index idx_cv(category_id,views);

5.再次测试

explian select id,author_id
from article 
where category_id = 1 and commnts >1 order by view desc limit 1;

3.3 关联查询优化

  1. ​ 内连接时,mysql.会自动把小结果集的选为驱动表,所以大表的字段最好加上索引。
  2. ​ 左外连接时,左表(驱动表)会全表扫描,所以右边大表字段最好加上索引。
  3. ​ 右连接同理,我们最好保证被驱动表上的字段建立索引。
-- 创建class表和book表
CREATE TABLE IF NOT EXISTS class (
id INT(10) AUTO_INCREMENT,
card INT(10),
PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS book (
bookid INT(10) AUTO_INCREMENT,
card INT(10),
PRIMARY KEY (bookid)
);
-- 给class和book分别插入十条随机数据
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO class(card) VALUES(FLOOR(1 + (RAND() * 20)));

INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO book(card) VALUES(FLOOR(1 + (RAND() * 20)));

1.连表查询

-- card没有建立索引,二张表走的都是全表查询
explain select *
from class
left join book
on class.card = book.card;

2.建立索引

-- 右边被驱动表查询字段建立索引
alter table book add index idx_card(card);

3.再次查询

-- 左外连接时,左边的表会进行全表扫描
-- 由外连接同理
explain select *
from class
left join book
on class.card = book.card;

image-20230510164409617

3.4 排序优化

  1. 尽量避免使用Using FileSort方式排序。

  2. order by语句使用索引最左前列或使用where子句与order by子句条件组合满足索引最左前列。

  3. where子句中如果出现索引范围查询会导致order by索引失效

-- order by能使用索引的最左前缀
ORDER BY sname;
ORDER BY sname,socre;
ORDER BY sname,score,age;
-- 降序或者升序要统一
ORDER BY sname DESC,score DESC,age DESC;
--  如果where使用了索引的最左前缀定义为常量,则order by能够使用索引
WHERE sname = const ORDER BY score age;
WHERE sname = const AND score  = const ORDER BY  age;
WHERE sname = const ORDER BY score age;
WHERE sname = const AND score > const ORDER BY score age;
-- 不能使用索引进行排序
-- 排序不一致
ORDER BY sname ASC,score DESC;
--  slike没有添加进索引
WHERE  slike = const ORDER by sname,score;
--  查询age没有使用到索引
WHERE  sname= const ORDER by age;
-- slike没有使用到索引
WHERE  sname= const ORDER by sname,slike;
--  in也是范围查询,score,age没有使用到索引查询
WHERE  sname in(...)  ORDER by score,age;

3.5 分组优化

思路和排序优化同

4 慢查询日志

4.1 介绍

​ mysql提供的一种日志记录,记录在mysql中相应时间超过阈值的数据。

4.2 慢查询日志的使用

默认情况下,mysql数据库没有开启慢查询日志,需要手动设置参数

-- 查看是否开启
show variables like '%slow_query_log%';

image-20230509102431455

-- 开启日志
set global slow_query_log = 1;

image-20230509102513339

-- 设置时间(单位为秒)
set global long_query_time = 1;

-- 查看时间
show variables like 'long_query_time%';

image-20230509102858978

-- 执行一条慢查询语句
select * from person where pname = "test1234" and sal = 22;

image-20230509103038328

-- 关闭日志
set global slow_query_log = off;

image-20230509103255534

4.3注意

​ 非调优条件下,一般不建议启动参数,慢查询日志支持将日志写入文件,开启慢查询日志会多少带来一定的性能影响。

  • 15
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mysql 总结........................................................................................................................................6 1.1 数据库的种类...........................................................................................................6 1.1.1 关系型数据库介绍.................................................................................................6 1.1.2 非关系型数据库介绍.............................................................................................7 1.1.3 非关系型数据库种类.............................................................................................7 1.1.4 关系型数据库产品介绍.........................................................................................8 1.1.5 常用非关系型数据库产品介绍.............................................................................8 1.2 mysql 多实例安装实战......................................................................................................9 1.2.1 什么是 mysql 多实例? .........................................................................................9 1.2.2 mysql 的多实例结构图.........................................................................................10 1.2.3 实战安装 mysql 多实例需要的依赖包...............................................................10 1.2.4 安装编译 mysql 需要的软件...............................................................................10 1.2.5 安装 mysql 软件...................................................................................................11 1.2.6 创建存放两个 mysql 实例的数据目录...............................................................11 1.2.7 创建两个 mysql 多实例的配置文件...................................................................12 1.2.7.1 3306 的实例................................................................................................12 1.2.7.2 3307 的实例................................................................................................16 1.2.7.3 多实例本地登录 mysql .............................................................................20 1.2.7.4 远程连接登录 mysql 多实例....................................................................20 1.3 mysql 基础安全................................................................................................................21 1.3.1 启动程序设置 700,属主和用户组为 mysql .....................................................21 1.3.2 为 mysq 级用户 root 设置密码........................................................................21 1.3.3 登录时尽量不要在命令行暴漏密码,备份脚本中如果有密码,给设置 700, 属主和用户组为 mysql 或 root......................................................................................21 1.3.4 删除默认存在的 test 库 .......................................................................................21 1.3.5 初始删除无用的用户,只保留 root 127.0.0.1 和 root localhost........................21 1.3.6 授权用户对应的主机不要用%,权限不要给 all,最小化授权,从库只给 select 权限.................................................................................................................................21 1.3.7 不要给一个用户管所有的库,尽量专库专用户...............................................21 1.3.8 清理 mysql 操作日志文件~/mysql_history.........................................................21 1.3.9 禁止开发获取到 web 连接的密码,禁止开发连接操作生产对外的库...........21 1.4.0 服务器禁止设置外网 IP ......................................................................................21 1.4.1 防 SQL 注入(WEB), php.ini 配置文件里面设置 ..........................................21 1.4.2 mysql 的备份的脚本给 700 的权限,并且属主和属组为 root..........................21 1.4 关于 mysql 的启动与关闭..............................................................................................21 1.4.1 单实例 MySQL 启动与关闭方法........................................................................21 1.4.2 多实例 MySQL 启动与关闭方法示例................................................................21 1.5 生产环境关闭 mysql 的命令..........................................................................................22 1.5.1 生产环境不能用强制命令关闭 mysql 服务 .......................................................22 1.5.2 下面来介绍优雅关闭数据库方法: ...................................................................22 1.6 登录 mysql 方法..............................................................................................................22 1.6.1 单实例 MySQL 登录的方法................................................................................22 1.6.2 多实例 MySQL 的登录方法................................................................................22 1.7 关于 mysql 管理员设置..................................................................................................22资源由 www.eimhe.com 美河学习在线收集分享 1.7.1 为管理员 root 用户设置密码并修改方法之一...................................................22 1.7.2 修改管理员 root 密码法二(sql 语句修改) .....................................................22 1.7.3 找回丢失的 mysql root 用户密码(单实例和多实例) ....................................23 1.8 SQL 结构化查询语言......................................................................................................23 1.8.1 什么是 SQL? ......................................................................................................23 1.8.2 SQL 语句最常见的分类一般就是 3 类 ...............................................................24 1.9 数据库的管理应用..........................................................................................................24 1.9.1 创建数据库...........................................................................................................24 1.9.2 查看库的字符集及校队规则...............................................................................24 1.9.3 企业场景创建什么字符集的数据库呢? ...........................................................26 1.9.4 显示数据库...........................................................................................................26 1.9.5 删除数据库...........................................................................................................26 1.9.6 进入数据库中指定的库.......................................................................................27 1.9.7 查看进入当前数据库的用户...............................................................................27 1.9.8 删除数据库多余的账号.......................................................................................27 1.9.9 查看数据库的用户...............................................................................................27 2.0.0 创建 MySQL 用户及赋予用户权限............................................................................27 2.0.1 使用语法:..............................................................................................................27 2.0.2 第一种创建用户及授权方法: ...........................................................................28 2.0.3 第二种创建用户及授权方法: ...........................................................................28 2.0.4 创建用户及授权哪个网段的主机可以连接 oldboy_gbk 库..............................29 2.0.4.1 第一种方法: .............................................................................................29 2.0.4.2 第二种方法: ............................................................................................29 2.0.5 关于 mysql 回收某个用户权限...........................................................................29 2.0.6 企业生产环境如何授权用户权限(mysql 主库) ............................................30 2.1 数据库表操作..................................................................................................................31 2.1.1 以默认字符集 latin1 建库....................................................................................31 2.1.2 建立表并查看表的结构.......................................................................................31 2.1.3 mysql 表的字符类型.............................................................................................32 2.1.3.1 数字类型.....................................................................................................32 2.1.3.2 日期和时间类型.........................................................................................32 2.1.3.3 字符串类型................................................................................................33 2.1.3.4 关于字符类型小结....................................................................................33 2.1.4 为表的字段创建索引...........................................................................................33 2.1.4.1 为表创建主键索引的方法........................................................................33 2.1.4.2 查看 student 表的结构 ..............................................................................34 2.1.4.3 怎么删除一个表的主键............................................................................34 2.1.4.4 利用 alter 命令修改 id 列为自增主键列..................................................34 2.1.4.5 建表后利用 alter 增加普通索引...............................................................34 2.1.4.6 对表字段的前 n 个字符创建普通索引....................................................36 2.1.4.7 为表的多个字段创建联合索引................................................................38 2.1.4.8 为表的多个字段的前 n 个字符创建联合索引........................................38 2.1.4.9 主键也可以联合多列做索引....................................................................39 2.1.5.0 统计一个字段列的唯一值个数................................................................40资源由 www.eimhe.com 美河学习在线收集分享 2.1.5.1 创建唯一索引(非主键) ........................................................................41 2.1.5.2 索引列的创建及生效条件........................................................................42 2.1.5 往表中插入数据...................................................................................................42 2.1.6 往表中删除一条数据...........................................................................................44 2.1.7 查询数据................................................................................................................44 2.1.7.1 查询表的所有数据行................................................................................44 2.1.7.2 查看 mysql 库的用户................................................................................45 2.1.7.3 根据指定条件查询表的部分数据............................................................45 2.1.7.4 根据固定条件查数据................................................................................46 2.1.7.5 指定固定条件范围查数据........................................................................46 2.1.7.6 根据顺序查看列数据................................................................................46 2.1.6.7 在表中根据条件导出数据至文件中........................................................47 2.1.8 多表查询...............................................................................................................47 2.1.8.1 创建学生表................................................................................................47 2.1.8.2 在学生表里插入数据.................................................................................47 2.1.8.3 创建课程表................................................................................................47 2.1.8.4 在课程表里插入数据................................................................................48 2.1.8.5 创建选课表................................................................................................48 2.1.8.6 联表查询命令............................................................................................49 2.1.9 使用 explain 查看 select 语句的执行计划..........................................................49 2.1.9.1 用查询语句查看是否使用索引情况........................................................49 2.1.9.2 为该列创建索引,再用查询语句查看是否走了索引............................50 2.2.0 使用 explain 优化 SQL 语句(select 语句)的基本流程..................................50 2.2.1 用命令抓取慢 SQL 语句,然后用 explain 命令查看查询语句是否走的索 引查询.....................................................................................................................50 2.2.2 设置配置参数记录慢查询语句...................................................................51 2.2.3 对抓取到的慢查询语句用 explain 命令检查索引执行情况 .....................51 2.2.4 对需要建索引的条件列建立索引...............................................................51 2.2.5 切割慢查询日志,去重分析后发给大家...................................................51 2.2.1 修改表中数据.......................................................................................................51 2.2.1.1 修改表中指定条件固定列的数据............................................................51 2.2.2 删除表中的数据...................................................................................................52 2.2.2.1 实践删除表中的数据................................................................................52 2.2.2.2 通过 update 伪删除数据...........................................................................53 2.2.3 增删改表的字段...................................................................................................53 2.2.3.1 命令语法及默认添加演示........................................................................53 2.2.4 更改表名...............................................................................................................55 2.2.5 删除表名...............................................................................................................56 2.2.6 mysql 数据库的备份与恢复.................................................................................56 2.2.6.1 备份单个数据库练习多种参数使用........................................................56 2.2.6.2 查看数据库 oldboy 的内容.......................................................................56 2.2.6.3 执行备份的命令........................................................................................57 2.2.6.4 查看备份的结果........................................................................................57 2.2.6.5 mysqldump 备份时加上-B 参数时的备份,然后比较不加-B 备份的不同资源由 www.eimhe.com 美河学习在线收集分享 .................................................................................................................................57 2.2.6.6 删除数据库中备份过的库 oldboy,然后将备份的数据重新导入数据库 .................................................................................................................................58 2.2.6.7 利用 mysqldump 命令对指定的库进行压缩备份...................................59 2.2.6.8 利用 mysqldump 命令备份多个库(-B 参数后可以指定多个库) ......59 2.2.6.9 分库备份(对 mysql、 oldboy、 oldboy_gbk、 wordpress 库进行备份) .................................................................................................................................60 2.2.7.0 对一个库的多个表备份............................................................................60 2.2.7.1 备份多个表................................................................................................61 2.2.7.2 备份单个表................................................................................................61 2.2.7.3 关于 mysqldump 的参数说明...................................................................61 2.2.7.4 刷新 binglog 的参数..................................................................................62 2.2.7.5 生产场景不同引擎 mysqldump 备份命令...............................................62 2.2.8 恢复数据库实践...................................................................................................63 2.2.8.1 数据库恢复事项........................................................................................63 2.2.8.2 利用 source 命令恢复数据库 ...................................................................63 2.2.8.3 利用 mysql 命令恢复(标准) ................................................................64 2.2.8.4 针对压缩的备份数据恢复........................................................................66 2.2.9 实现和 mysql 非交互式对话...............................................................................66 2.2.9.1 利用 mysql –e 参数查看 mysql 数据库的库名........................................66 2.2.9.2 利用 mysql –e 参数查看 mysql 数据库的线程状态................................66 2.2.9.3 mysql sleep 线程过多的问题案例............................................................66 2.2.9.4 查看 mysql 配置文件有没有在数据库中生效 ........................................67 2.2.9.5 不重启数据库修改数据库参数................................................................68 2.2.9.6 不重启数据库更改数据库参数小结........................................................69 2.3.0 查看 mysql 状态的信息(利用 zabbix 可以监控其状态信息) .......................69 2.3.1 mysqladmin 的命令...............................................................................................75 2.3.2 mysql 工具 mysqlbinlog........................................................................................76 2.3.2.1 mysql 的 binlog 日志是什么? ..................................................................76 2.3.2.2 mysql 的 binlog 日志作用是什么? ..........................................................76 2.3.2.3 mysqlbinlog 工具解析 binlog 日志实践....................................................76 2.3.2.4 解析指定库的 binlog 日志........................................................................76 2.3.3 mysql 数据库的服务日志.....................................................................................77 2.3.3.1 错误日志(error log)介绍与调整..........................................................77 2.3.3.2 普通查询日志(general query log)介绍与调整(生产环境中不用) 77 2.3.3.3 慢查询日志介绍与调整............................................................................78 2.3.3.4 二进制日志介绍与调整............................................................................78 2.3.4 mysql 的 binlog 有三种模式.................................................................................78 2.3.4.1 row level......................................................................................................78 2.3.4.2 statement level(默认) ..................................................................................79 2.3.4.3 Mixed ..........................................................................................................79 2.3.5 企业场景如何选择 binlog 的模式.......................................................................79 2.3.6 设置 mysql binlog 的格式....................................................................................79 2.3.7 mysql 生产备份实战应用指南.............................................................................80资源由 www.eimhe.com 美河学习在线收集分享 2.3.7.1 全量备份....................................................................................................80 2.3.7.2 增量备份....................................................................................................80 2.3.7.3 企业场景和增量的频率是怎么做的? ....................................................81 2.3.7.4 mysql 增量恢复必备条件..........................................................................81 2.3.7.5 实战模拟凌晨 00 点对 oldboy库做个全备,早上 10 点左右删除了 oldboy 库,下面是其恢复过程.........................................................................................81 2.3.7.6 实战模拟凌晨 00 点对 oldboy库做个全备,早上 10 点左右更新了 oldboy 库的 test 表中所有字段数据,下面是其恢复过程(update 表中的数据的时候, 把表中的字段换成了一个相同的内容,这时候要停库) .................................83 2.3.8 mysql 的主从复制的结构图.................................................................................85 2.3.8.1 单向的主从复制图,此架构只能在 master 端进行数据写入(生产环境 可以使用) .............................................................................................................85 2.3.8.2 双向的主主同步逻辑图,此架构可以在 master1 端或 master2 端进行数 据写入(生产环境不建议使用) .........................................................................85 2.3.8.3 线性级联单向双主同步逻辑图,此架构只能在 master1 端进行数据写入 (生产环境可以使用) .........................................................................................86 2.3.8.4 环状级联单向多主同步逻辑图,任意一个都可以写入数据(生产环境 不建议使用) .........................................................................................................86 2.3.8.5 环状级联单向多主多从同步逻辑图,此架构只能在任意一个 master 端 进行数据写入(生产环境不建议使用) .............................................................86 2.3.9 mysql 主从复制的原理.........................................................................................86 2.4.0 mysql 主从复制的原理图.....................................................................................87 2.4.1 mysql 主从复制的实践.........................................................................................87 2.4.1.1 环境准备....................................................................................................87 2.4.1.2 分别查看 3306 和 3307 不同数据库有哪些库........................................87 2.4.1.3 全量备份 3306 数据库的库,然后到 3307 数据库中............................88 2.4.1.4 在 3306 数据库上授权用户可以到 3306 数据库上复制 binlog.............89 2.4.1.5 在 3307 数据库上开启复制 3306 的 binlog 开关,并查看是否处于同步 状态.........................................................................................................................89 2.4.1.6 在 3306 上创建数据库 zhangxuan,看 3307 上是否同步过来..............91 2.4.2 关于主从复制出现故障怎么解决.......................................................................92 2.4.3 主从复制延迟问题原因及解决方案...................................................................92 2.4.3.1 一个主库的从库太多,导致复制延迟....................................................92 2.4.3.2 从库硬件比主库差,导致复制延迟........................................................92 2.4.3.3 慢 SQL 语句过多 ......................................................................................92 2.4.3.4 主从复制的设计问题................................................................................93 2.4.3.5 主从库之间的网络延迟............................................................................93 2.4.3.6 主库读写压力大,导致复制延迟............................................................93 2.4.4 通过 read-only 参数让从库只读访问..................................................................93 2.4.5 web 用户专业设置方案: mysql 主从复制读写分离集群..................................93 2.4.6 让 mysql 从库记录 binlog 日志方法...................................................................94 2.4.7 mysql 主从复制集群架构的数据备份策略.........................................................94 2.4.8 mysql 一主多从,主库宕机,从库怎么接管.....................................................95 2.4.8.1 半同步从库(谷歌半同步插件 5.5 版本自带) .....................................95资源由 www.eimhe.com 美河学习在线收集分享 2.4.8.2 S1,啥也不干只做同步的从库, 500 台服务器,百度..........................95 2.4.8.3 皇帝驾崩现选(耽误事,容易被篡位) ................................................95 2.4.9 事务介绍...............................................................................................................97 2.4.9.1 事务的四大特性(ACID) ......................................................................97 2.4.9.2 事务的开启................................................................................................97 2.4.9.3 事物的实现................................................................................................98 2.5.0 mysql 引擎概述.....................................................................................................98 2.5.0.1 什么是存储引擎? ....................................................................................98 2.5.0.2 mysql 存储引擎的架构..............................................................................99 2.5.0.3 myisaw 引擎介绍 .......................................................................................99 2.5.0.4 myisaw 引擎特点 .......................................................................................99 2.5.1 myisaw 引擎调忧精要 ........................................................................................100 2.5.2 innodb 引擎..........................................................................................................100 2.5.2.1 什么是 innodb 引擎? .............................................................................100 2.5.2.2 innodb 引擎特点.......................................................................................101 2.5.2.3 innodb 引擎适应的生产业务场景...........................................................102 2.5.2.4 关于 innodb 引擎的一些参数设置.........................................................102 2.5.2.5 innodb 引擎调忧精要...............................................................................102 2.5.3 有关 mysql 引擎特别说明.................................................................................103 2.5.4 关于 mysql 的字符集.........................................................................................103 2.5.4.1 mysql 常见的字符集? ............................................................................103 2.5.4.2 mysql 如何选择合适的字符集? ............................................................103 2.5.4.3 如何查看字符集......................................................................................103 2.5.4.4 不同字符集参数的含义如下(要想数据库字符不乱码,下面几个字符 集要相同) ...........................................................................................................104 2.5.4.5 set names 字符集名,此命令有什么作用 .............................................105 2.5.4.6 根据配置文件更改客户端字符集..........................................................105 2.5.4.7 更改 mysql 服务端的字符集..................................................................106 2.5.4.8 怎么解决乱码问题..................................................................................106 2.5.4.9 插入数据不乱码的方法..........................................................................106 2.5.5.0 更改数据库的字符集..............................................................................106 2.5.5.1 更改表的字符集......................................................................................106 2.5.6 模拟将 latin1 字符集的数据库修改成 UTF8 字符集的实际过程 ..................107
第一部 MySQL基础入门(21节) 01-老男孩运维DBA课程开班.avi 02-数据库概念介绍.avi 03-数据库种类介绍及关系型数据库原理.avi 04-非关系型数据库介绍.avi 05-非关系型数据库种类介绍.avi 06-关系型数据库产品介绍01.avi 07-关系型数据库产品介绍02.avi 08-非关系型数据库产品介绍01.avi 09-数据库产品排名及发展大事记.avi 10-MySQL数据库产品介绍.avi 11-数据库基础内容小结.avi 12-为什么选择MySQL数据库MySQL优势介绍.avi 13-MySQL数据库分类与版本升级知识讲解.avi 14-MySQL数据库商业版与社区版区别.avi 15-MySQL数据库的发布版本知识讲解.avi 16-MySQL数据库发展的三条产品线介绍.avi 17-MySQL数据库发布版本命名知识介绍.avi 18-企业生产场景如何选择MySQL产品线产品及对应版本.avi 19-MySQL数据库企业生产常用5种安装方法介绍.avi 20-如何选择MySQL数据库版本及安装方式.avi 21-MySQL5.5编译方式安装实战.avi 第二部 MySQL多实例安装与企业应用场景(10节) 22-MySQL数据库多实例介绍.avi 23-MySQL数据库多实例的优势和问题介绍.avi 24-MySQL数据库多实例的门户企业应用场景.avi 25-MySQL数据库多实例的多种配置方案介绍.avi 26-MySQL数据库多实例安装实战讲解.avi 27-MySQL数据库多实例初始化及服务启动.avi 28-MySQL数据库多实例启动问题排错方法及实战排错.avi 29-MySQL数据库多实例实战排错02.avi 30-增加MySQL数据库第三个实例实战讲解.avi 31-MySQL数据库多实例的其他故障问题说明.avi 第三部:MySQL应用管理及进阶实战操作(29节) 01-MySQL启动与关闭深入知识及原理.avi 02-登录MySQL知识深入讲解.avi 03-学会使用MySQL数据库的帮助.avi 04-修改mysql密码多方法实战及注意-排错.avi 05-找回丢失的mysql密码实战.avi 06-多实例找回丢失的mysql密码.avi 07-SQL语言介绍及分类详解.avi 08-创建不同字符集数据库及企业场景应用讲解.avi 09-显示-连接-删除等数据库的库管理应用讲解.avi 10-创建mysql用户及授权的多种方法实战.avi 11-本地及远程主机授权思想及多种方法实战.avi 12-自己动手实战确定MySQL的授权权限列表.avi 13-生产场景如何授权用户及权限讲解.avi 14-MySQL建表语句及表的知识.avi 15-查看表结构以及建表语句.avi 16-索引的知识及索引创建多种方法实战.avi 17-索引生效的基本条件说明.avi 18-主键-唯一-普通索引创建及删除小结.avi 19-DML语句之insert知识讲解.avi 20-DQL之select知识实战讲解.avi 21-DQL之select多表连表查询实战.avi 22-利用explain查看sql语句的执行计划.avi 23-DML之修改表中的记录实战.avi 24-小试牛刀初步增量恢复MySQL数据实战.avi 25-某企业运维全套面试题解答.avi 26-DML之修改表及企业严重故障案例解决实战.avi 27-删除表中的数据机企业故障案例及防止方法.avi 28-增删改表的字段实战详解.avi 29-更改表名及删除表实战讲解.avi 第四部 MySQL乱码问题及字符集实战(14节) 01-MySQL数据乱码及多种解决方案实战1.avi 02-MySQL数据乱码及多种解决方案实战2.avi 03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-课前思想-17期学生23万入职BAT公司 06-课前思想-及课前考试题说明.avi 07-MySQL字符集介绍及生产常用字符集说明.avi 08-MySQL不同字符集区别及企业生产选择.avi 09-MySQL乱码原因开始系统影响揭秘.avi 10-MySQL上执行set names到底做了什么?.avi 11-MySQL命令带字符集导入到底做了什么?.avi 12-MySQL数据中文不乱码终极实战.avi 13-MySQL数据中文不乱码终极大总结.avi 14-更改生产线上MySQL数据字符集的方案讲解.avi 第五部 MySQL备份、增量备份及数据恢复基础实战(12节) 01-备份数据的意义及重要性.avi 02-mysqldump多个命令参数备份实战.avi 03-mysqldump逻辑备份的工作原理.avi 04-备份多个库的思想及多种方法讲解.avi 05-mysql单多表的备份实战及脚本批量备份讲解.avi 06-只备份MySQL表结构及只备份MySQL数据.avi 07-企业生产场景不同引擎备份命令参数详解.avi 08-利用source恢复mysql数据讲解及实战.avi 09-分库备份后mysql如何分库恢复实战.avi 10-mysql进程-状态-在线修改参数重要知识讲解.avi 11-mysqlbinlog命令介绍及实战讲解.avi 12-mysqldump-master-data参数答疑详解.avi 第六部 MySQL主从复制原理及实战部署(10节) 01-由架构因为引出主从复制的作用及重要性.avi 02-文件及DB各种同步方案大集合介绍讲解.avi 03-mysql主从复制介绍及分布式数据库架构实现介绍.avi 04-主从同步的应用场景及切换从库不丢数据多方案介绍.avi 05-mysql数据库读写分离介绍及企业生产实现方案.avi 06-根据企业业务拆分业务应用到不同的从库思想.avi 07-mysql主从复制原理画图深入浅出讲解.avi 08-mysql主从复制实战01.avi 09-mysql主从复制实战02.avi 10-主从复制的简单实现方案说明.avi 第七部 MySQL主从复制企业级深入高级应用实战(20节) 01-MySQL主从复制原理画图口头考试讲解.avi 02-课前思想-企业面试必胜绝招讲解.avi 03-MySQL主从复制故障多个案例实战讲解.avi 04-回顾MySQL主从复制配置步骤及注意事项.avi 05-回顾MySQL主从复制原理要点.avi 06-企业场景MySQL主从复制最牛部署方案.avi 07-一键获取全备及binlog位置多种方案讲解.avi 08-不停主库一键批量配置MySQL主从复制方案.avi 09-MySQL主从复制3个线程状态信息讲解.avi 10-MySQL主从复制读写分离授权多种方案案例详解.avi 11-忽略MySQL主从复制主库授权表同步实战.avi 12-MySQL主从复制指定不同库表同步参数说明.avi 13-MySQL主从复制从库只读案例实战及原理总结.avi 14-企业生产场景MySQL主从复制故障原因及实战解决.avi 15-从库开启BINLOG原因及开启实战讲解1.avi 16-从库开启BINLOG原因及开启实战讲解2.avi 17-企业场景一主多从宕机从库切换主继续和从同步过程详解1.avi 18-企业场景一主多从宕机从库切换主继续和从同步过程详解2.avi 19-企业场景一主多从宕机从库宕机解决.avi 20--企业场景-双主及多主同步过程详解及企业选用方案说明.avi 第八部-老男孩MySQL备份与恢复实战案例及生产方案(10节) 01-全量及增量备份概念及优缺点详解 02-不同企业如何选择备份方案及备份需要恢复的场景分析 03-企业场景数据库需要增量恢复的条件分析 04-MySQL数据恢复的必要条件及恢复案例场景图解分析 05-实战模拟企业数据丢失应用的案例场景 06-MySQL数据库增量恢复详细实战 07-更多MySQL数据库增量恢复大讨论及大总结 08-MySQL增量恢复小结及核心恢复思想 09-课后自学能力作业-务必完成并分享讲解 10-内部学员技术大会分享课表说明 第九部-老男孩MySQL服务日志详细介绍及增量恢复命令实践(7节) 01-mysqlbinlog命令介绍及实战讲解 02-mysqldump-master-data参数答疑详解 03-MySQL服务错误日志介绍及实践 04-MySQL服务普通查询日志介绍及实践 05-MySQL服务慢查询日志介绍及实践 06-MySQL服务二进制日志的3种工作模式详细介绍 07-MySQL服务二进制日志的3种工作模式配置方法实战 第十部-老男孩MySQL常用引擎及优缺点-应用场景-调优详解(14节) 01-MySQL服务存储引擎介绍 02-MySQL服务存储引擎体系结构 03-MySQL服务MyISAM引擎介绍及磁盘文件格式 04-MySQL服务事务详细介绍及ACID特性说明 05-MySQL服务MyISAM引擎特点讲解 06-MySQL服务MyISAM引擎适合的生产应用场景 07-MySQL服务MyISAM引擎调优精要 08-MySQL服务InnoDB引擎介绍及磁盘文件格式 09-MySQL服务InnoDB引擎特点讲解 10-MySQL服务InnoDB引擎适合的生产应用场景 11-MySQL服务InnoDB引擎调优及不同引擎功能对比 12-MySQL服务引擎种类功能及对应参数配置说明 13-批量修改MySQL服务引擎的多种方案 14-有关MySQL服务存储引擎的面试题等说明 第十一部 MySQL读写分离开发实现及软件实现-物理备份-高可用(已经包含有5节视频+文档资料) 01-amoeba读写分离实现技术分享.avi 02-mysql-proxy读写分离实现技术分享.avi 03-PHP程序实现读写分离技术分享.avi 04-xtrabackup热备工具技术分享.avi 05-mysql-mmm高可用实现技术分享.avi 文档资料 01-mysql-mmm高可用架构-王雄.rar 02-mysql半主从同步-技术分享--余宏刚.rar 03-xtrabackup安装及操作文档-技术分享--王玉晓.rar 04-mysql主从通过mysql-proxy程序实现读写分离.doc 老男孩linux测试读写分离php网站源代码.zip 第十二部 MySQL高可用工具heartbeat实战(33节) 01-heartbeat介绍与作用.avi 02-Heartbeat的工作原理与服务切换条件.avi 03-Heartbeat心跳连接介绍.avi 04-裂脑的概念讲解.avi 05-裂脑发生的多种原因介绍.avi 06-防止裂脑发生的8种秘籍01.avi 07-防止裂脑发生的8种秘籍02.avi 08-防止裂脑发生的8种秘籍03.avi 09-有关fence设备和仲裁机制说明.avi 10-heartbeat的消息类型介绍.avi 11-heartbeat的IP接管和故障转移原理.avi 12-高可用软件的IP配置管理技术讲解.avi 13-heartbeat的默认路径配置介绍.avi 14-heartbeat的软件版本分支说明.avi 15-heartbeat企业应用场景介绍.avi 16-部署heartbeat高可用业务需求描述.avi 17-模拟服务器准备及IP配置说明.avi 18-配置主机名及服务器hosts文件解析.avi 19-配置服务器间心跳的连接.avi 20-安装heartbeat软件及配置文件讲解.avi 21-heartbeat的主要配置文件参数讲解.avi 22-实战配置heartbeat配置文件.avi 23-启动heartbeat服务并查看配置的VIP.avi 24-发生裂脑故障及根据前面原理排查思路.avi 25-通过heartbeat日志分析接管过程.avi 26-heartbeat实现web服务高可用实战案例1.avi 27-heartbeat实现web服务高可用实战案例1原理.avi 28-heartbeat实现web服务高可用案例2.avi 29-有关heartbeat调用资源的生产场景应用.avi 30-heartbeat高可用案例拓展.avi 31-heartbeat和keepalived的应用场景区别.avi 32-heartbeat服务生产环境下维护要点.avi 33-heartbeat服务生产环境维护FAQ.avi 第十三部 MySQL高可用工具drbd实战(18节) 01-drbd服务介绍.avi 02-drbd的工作原理介绍.avi 03-drbd的工作原理图.avi 04-drbd的复制协议与应用模式.avi 05-drbd的企业应用场景介绍.avi 06-常见运维同步工具介绍.avi 07-drbd的部署及ip配置规划.avi 08-drbd软件的安装配置准备.avi 09-创建同步的分区实践drbd.avi 10-drbd环境分区说明及分区命令.avi 11-实际安装drbd软件实战.avi 12-drbd相关配置列表说明.avi 13-配置drbd加载到内核模块.avi 14-drbd配置文件参数讲解及实际配置.avi 15-drbd服务初始化数据故障机排查过程.avi 16-启动drbd并配置主从同步数据.avi 17-drbd服务的常见故障及排查方法.avi 18-挂载测试数据库同步及查看备节点数据.avi 第十四部 MySQL高可用综合实战(完整版32节) 01-重要课前思想mp4 02-MySQL高可用需求与架构讲解mp4 03-大规模集群架构中MySQL高可用的位置和架构mp4 04-MySQL高可用实战模拟环境描述mp4 05-MySQL高可用生产场景配置及网络地址规划mp4 06-MySQL高可用实施正式环境准备与裂脑注意mp4 07-快速安装双机Centos6.4下heartbeat并配置启动mp4 08-快速安装双机Centos6.4下drbd服务准备01mp4 09-快速安装双机Centos6.4下drbd服务实战02mp4 10-详解drbd服务状态信息细节mp4 11-启动服务测试DRBD实际同步情况mp4 12--配合heartbeat调试drbd服务配置mp4 13-MySQL服务安装实战安装过程讲解mp4 14-一键安装Mysql多实例实战讲解与演示mp4 15-通过手工测试MySQL的高可用切换mp4 16-MySQL双主高可用自动切换实战实现mp4 17-有关MySQL双主高可用my.cnf的配置注意事项讲解mp4 18-MySQL高可用切换的重要思想原理及故障排除思想、mp4 19-MySQL主从同步一键安装脚本实战mp4 20-MySQL多主多从高可用集群自动切换实现mp4 21-有关MySQL高可用注意及常见故障讲解mp4 22-MySQL集群及高可用的更多思路方案引子mp4 23-常见MySQL集群高可用架构讲座01.mp4 24-常见MySQL集群高可用架构讲座02.mp4 25-常见MySQL集群高可用架构讲座03.mp4 26-常见MySQL集群高可用架构讲座04.mp4 27-常见MySQL集群高可用架构讲座05.mp4 28-门户分布式数据库架构案例分享01.mp4 29-门户分布式数据库架构案例分享02.mp4 30-门户分布式数据库架构案例分享03.mp4 31-门户分布式数据库架构案例分享04.mp4 32-门户分布式数据库架构案例分享05.mp4 第十五部 MySQL数据库优化思想与优化实战(9节) 1-网站打开慢mysql问题多解决方案企业案例.avi 2-MySQL索引优化要点精讲01 3-MySQL索引优化生产案例讲解02 4-linux运维人员必须掌握的核心经验案例.avi MySQL数据库生产场景核心优化精讲 5-MySQL数据库硬件优化生产方案及细节精讲01.avi 6-MySQL数据库系统优化生产方案及细节精讲02.avi 7-MySQL数据库参数索引优化生产方案及细节精讲03.avi 8-MySQL数据库SQL优化生产方案及细节精讲04.avi 9-MySQL数据库架构优化生产方案及细节精讲05.avi 第十六部 MySQL业务变更流程与安全管理思想(7节) 01-安全优化-项目开发流程及数据库更新流程.avi 02-DBA参与项目数据库设计及培训开发人员高效设计MYSQL库语句.avi 03-老男孩核心思想-项目周期的制定思想.avi 04-linux进程占用cpu高的解决方案案例.avi 05-数据库账户权限控制多种思路及技巧.avi 06-数据库客户端安全控制策略详解.avi 07-数据库运维的核心管理思想.avi
MySQL索引优化是提高查询性能的关键。下面是一些优化MySQL索引的方法: 1. 选择合适的索引 索引并非越多越好,需要根据实际情况选择合适的索引。通常来说,可以根据以下几个原则来选择索引: - 对经常查询的列进行索引 - 对频繁用于WHERE、JOIN、ORDER BY和GROUP BY子句的列进行索引 - 对选择性高的列进行索引(即不同值越多的列) 2. 删除不必要的索引 过多的索引会占用过多的磁盘空间并降低写操作的性能,因此需要删除不必要的索引。可以使用如下语句查询所有的索引,并根据实际情况删除不必要的索引: ``` SHOW INDEX FROM table_name; ``` 3. 避免全表扫描 全表扫描是指MySQL查询时没有使用索引,而是扫描整个表的数据。全表扫描会导致查询效率低下,因此需要避免全表扫描。可以通过优化查询语句,例如添加索引、改变表结构等方式来避免全表扫描。 4. 使用覆盖索引 覆盖索引是指查询语句只需要使用索引中的列就可以返回查询结果,而不需要再去查询表中的数据。覆盖索引可以减少查询的IO操作,提高查询效率。 5. 定期维护索引 索引需要定期维护,包括优化查询语句、删除不必要的索引、重新构建索引等。可以使用MySQL自带的OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。 以上就是MySQL索引优化的一些方法,需要根据实际情况进行选择和优化。需要注意的是,不同的索引优化策略对于不同的数据库环境和数据结构可能会有所不同,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橘子味汽水ღ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值