mysql数据库优化课程---18、mysql服务器优化

一、总结

一句话总结:

1.四种字符集问题:字符集都设置为utf-8
2.slow log慢查询日志问题
3.root密码丢失

1、mysql存在索引但是不使用索引的情况有哪些?

都会取到
or

(1)如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如如果

列key_part1均匀分布在1到100之间,查询时使用索引就不是很好

也就是比如取1-100条,因为这100条都会被取到,所以用不用索引没有什么意义

(2)如果使用MEMORY/HEAP表并且where条件中不使用“=”进行索引

列,那么不会用到索引。Heap表只有在“=”的条件下会使用索引。

(3)用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没

有索引,那么涉及的索引都不会被用到。

mysql>show index from sales\G
*************************** 1. row ***************************
… …
key_name: ind_sales_year
seq_in_index:1
Column_name: year
… …

2、数据类型:如果列类型是字符串,但在查询时把一个数值型常量赋值给了一个字符型的列名name,索引会用上么?

不会

那么虽然在name列上有索引,但是也没有用上,所以要注意查询时候的数据类型

sql>。 explain select * from company2 where name
name=294\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: ALL
possible_keys: ind_company2_name
key: NULL
key_len: NULL
ref: NULL
rows: 1000
Extra: Using where
1 row in set (0.00 sec)

字段和值类型不同:
#desc select * from user where username=200\G
当条件中字段和值的类型不同时,该字段的索引可能会失效.

3、如何查看索引的使用情况?

show status
Handler_read_rnd_next
Handler_read_key

如果索引正在工作,Handler_read_key的值将很高,
这个值代表了一个行被索引值读的次数。
• Handler_read_rnd_next的值高则意味着查询运行低效
,并且应该建立索引补救。
mysql> show status like 'Handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 5 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 2055 |
+-----------------------+-------+
6 rows in set (0.00 sec)

查看索引的使用频次:
mysql> show status like "%Handler_read%";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_key      | 42    |    #越大越好
| Handler_read_rnd_next | 306   |    #越小越好
+-----------------------+-------+

4、如何解决嵌套查询索引可能失效的问题?

链接查询

可以使用更有效的链接查询(Join)替代

普通多表查询索引也用的上

mysql5.1版本嵌套查询索引可能失效,5.7版本优化了,好像不会失效了

5、多表查询有哪些?

嵌套查询
普通多表查询
链接查询

6、mysql5.7对多表查询的支持情况怎样?

索引优化

#desc select * from t1 where class_id in(select id from class)\G
#desc select t1.* from t1,class where t1.class_id=class.id\G
#desc select t1.* from class left join t1 on t1.class_id=class.id\G
目前5.7的版本中常用的多表查询都进行索引优化.

7、mysql root密码如何破解?

set password

1.密码没有忘,但我要改密码
set password=password('123');

2.密码忘记了,我要破解密码
1)关闭mysql服务
net stop mysql57

2)越过user表启动mysql
a.越过授权表启动mysql母进程
cd AppServ\MySQL\bin
mysqld.exe --skip-grant-tables &

b.无密码登录
mysql -uroot

c.刷新管理员权限
flush privileges;

d.有权限后改密码
alter user 'root'@'localhost' identified by '789';

3)关闭win下任务管理器中mysqld进程

4)重新启动mysql服务
net start mysql57

二、内容在总结中

check表检查:
mysql> check table v_user;
---------------------------------------------------------------------------+
| yzmedu.v_user | check | Error    | Table 'yzmedu.class' doesn't exist
                                                                           |
| yzmedu.v_user | check | Error    | View 'yzmedu.v_user' references invalid table(s) or c
olumn(s) or function(s) or definer/invoker of view lack rights to use them |
| yzmedu.v_user | check | error    | Corrupt
                                                                           |
---------------------------------------------------------------------------+

索引的存储分类:
1.myisam
1)frm 表结构
2)myd 表数据
3)myi 表索引

2.innodb
1)frm 表结构
2)ibd 索引+部分表数据
3)ibdata1 所有表共享空间

复合索引:
对于创建的多列索引,只要查询的条件中用到最左边的列,索引一般就会被使用.

like关键字:
#desc select * from user where username like 'linux%'\G
当使用like进行搜索时,%在前索引可能会失效.

null判断:
#desc select * from user where username is null;
当判断null值时会使用username这一列的索引.

or关键字:
#desc select * from user where username='user7' or age=15\G
在使用or的情况下两边的索引都有可能失效.

字段和值类型不同:
#desc select * from user where username=200\G
当条件中字段和值的类型不同时,该字段的索引可能会失效.

查看索引的使用频次:
mysql> show status like "%Handler_read%";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_key      | 42    |    #越大越好
| Handler_read_rnd_next | 306   |    #越小越好
+-----------------------+-------+

多表查询索引使用:
#desc select * from t1 where class_id in(select id from class)\G
#desc select t1.* from t1,class where t1.class_id=class.id\G
#desc select t1.* from class left join t1 on t1.class_id=class.id\G
目前5.7的版本中常用的多表查询都进行索引优化.

Mysql服务器优化:
1.四种字符集问题
2.slow log慢查询日志问题
3.root密码丢失

mysql root密码破解:
1.密码没有忘,但我要改密码
set password=password('123');

2.密码忘记了,我要破解密码
1)关闭mysql服务
net stop mysql57

2)越过user表启动mysql
a.越过授权表启动mysql母进程
cd AppServ\MySQL\bin
mysqld.exe --skip-grant-tables &

b.无密码登录
mysql -uroot

c.刷新管理员权限
flush privileges;

d.有权限后改密码
alter user 'root'@'localhost' identified by '789';

3)关闭win下任务管理器中mysqld进程

4)重新启动mysql服务
net start mysql57

 

mysql数据库优化课程---18、mysql服务器优化的更多相关文章

  1. 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

    重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...

  2. mysql 数据库导入数据报错MySQL server has gone away解决办法

    mysql 数据库导入数据报错MySQL server has gone away解决办法: 进入数据库执行以下命令即可: set global wait_timeout = 2880000; set ...

  3. MySQL基础之第18章 性能优化

    18.1.优化简介 SHOW STATUS LIKE ‘value’;connections                 连接数uptime                          启动 ...

  4. CentOS下mysql数据库data目录迁移和配置优化

    目录迁移 关闭数据库服务 service mysqld stop 复制数据库 mv /var/lib/mysql /data/mysql # 或者使用cp -a复制 # 这两个命令都会带权限到新目录去 ...

  5. Mysql数据库(十)MySQL性能优化

    一.优化概述 为了提高MySQL数据库的性能,不要进行一系列的优化措施.如果MySQL数据库需要进行大量的查询操作,那么就需要对查询语句进行优化.对于耗费时间的查询语句进行优化,可以提高整体地查询速度 ...

  6. MySQL数据库_索引_事务_优化 _锁_存储引擎_存储过程_CAP

    ##一.基础 ## *    插入                   INSERT INTO table_name ( field1, field2,...fieldN )              ...

  7. C语言连接MySQL数据库(课程设计总结)

    刚结束课程设计,也预示着假期立即就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注冊.登录.菜单管理.超级用户等等一些功能,到如今为止已经做过好几个了,所以基本流程都熟悉了! ...

  8. 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)

    一.初识MySQL数据库 ###<1>数据库概述     1. 数据库         长期存储在计算机内的,由组织的可共享的数据集合         存储数据的仓库         文件 ...

  9. Mysql数据库(三)Mysql表结构管理

    一.MySQL数据类型 1.数字类型 (1)整数数据类型包括TINYINT/BIT/BOOL/SMALLINT/MEDIUMINT/INT/BIGINT (2)浮点数据类型包括FLOAT/DOUBLE ...

随机推荐

  1. C# 预定义语言

    官网: https://msdn.microsoft.com/zh-cn/library/88td0y52.aspx [Conditional("DEBUG")] 作为预处理中的一 ...

  2. SpringMVC-SimpleDEMO

    本博文主要将如何配置一个简单的SpringMVC的DEMO,由上一讲的SpringMVC工作流程来看,配置一个SpringMVC的步骤是简单而清晰的. 一.引入SpringMVC所需依赖   < ...

  3. 压力测试工具MySQL mysqlslap

    MySQL mysqlslap压测 2016-09-12 17:49 by pursuer.chen, 771 阅读, 0 评论, 收藏, 编辑 介绍 mysqlslap是mysql自带的一个性能压测 ...

  4. phpMyAdmin的安装配置

    找到$cfg['blowfish_secret'] = '',将其值改为你自己想要的任意字符,如$cfg['blowfish_secret'] = 'owndownd': 找到$cfg['Server ...

  5. web前端攻城狮整理的收藏夹

    作为一名web前端开发工程师你的收藏夹存对了吗?下面是一份互联网上流传甚广的web前端开发收藏夹资源,包含学习网站.JS库.常用工具.常用插件.资讯书籍等资源.速速转存吧~   一.学习网站   W3 ...

  6. NGUI混合FingerGesture《卷二》分离触摸事件

    背景 在使用NGUI按钮组件的时候,点击按钮同时触发FingerGesture的Touch事件, 通俗点讲,NGUI点击之后,点击事件被FingerGesture又执行了一遍. 解决思路 持有一个全局 ...

  7. 带你走进ajax(3)

    使用ajax实现用户名有效性验证 需求:当用户输入完用户名时,用户可以通过页面上的按键来确认当前的用户名是否有效.如下图所示 思路:用户触发按键后可以向服务器发起http请求,将用户名提交给服务器来进 ...

  8. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  9. RabbitMQ学习之(一)_初步了解RabbitMQ、RabbitMQ的使用流程、为什么要使用RabbitMQ、RabbitMQ的应用场景

    初识RabbitMQ RabbitMQ是一个在AMQP协议基础上实现的消息队列系统, 是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件 ...

  10. 使用Spring注解注入属性

    本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...