首页 运维知识 此篇讲解mysql的使用与sql优化

此篇讲解mysql的使用与sql优化

安装:rpm -ivh rpm软件名称 如果安装时 与某个软件 xxx冲突,则需要将冲突的软件卸载掉: 安装时 有日志提示我们可以修改密码:/user/bin/mysqladmin…

安装:rpm -ivh rpm软件名称

如果安装时 与某个软件 xxx冲突,则需要将冲突的软件卸载掉:

安装时 有日志提示我们可以修改密码:/user/bin/mysqladmin -u root password ‘new-password’

注意:如果提示“GPG keys….”安装失败,解决方案:rpm -ivh rpm软件名称  –force –nodoeps

验证:mysqladmin  –version

启动mysql应用:service mysql start

关闭: service mysql stop

重启:service mysql restart

在计算机reboot后,登录MySQL:mysql

可能会报错: “/var/lib/mysql/mysql.sock不存在”

— 原因:是Mysql服务没有启动

解决:启动服务:1.每次使用前 手动启动服务 I/etc/init.d/mysql start

2. 开机自启  chkconfig mysql on  ,  chkconfig mysql off

检查开机是否自动启动:ntsysv

给mysql的超级管理员root 增加密码:/user/bin/mysqladmin -u root password root

登录:

mysql -u root -p

数据库存放目录:

ps -ef|grep mysql 可以看到:

数据库目录:datadir=/var/lib/mysql

pid文件目录:–pid-file=/var/lib/mysql/bigdata01.pid

MySQL核心目录:

/var/lib/mysql:mysql安装目录

/usr/share/mysql:配置文件

/usr/bin :命令目录(mysqladmin ,mysqldump 等命令)

/etc/init.d/mysql: mtsql启停脚本

MySQL 配置文件

my-huge.cnf         高端服务器   1-2G内存

my-large.cnf         中等规模

my-medium.cnf    一般

my-small.cnf        较小

但是,以上配置文件Mysql默认不能识别,默认只能识别 /etc/my.cnf

采用 my-huge.cnf:

cp   /usr/share/mysql/my-huge.cnf   /etc/my.cnf

注意:mysql5.5  默认配置文件/etc/my.cnf; Mysql5.6 默认配置文件/etc/mysql-default.cnf

默认端口3306

mysql字符编码:

sql  : show variables like ‘char’:

可以发现部分编码是 latin,需要统一设置为utf-8

设置编码:

vi   /etc/my.cnf:

[mysql]

default-character-set=utf-8

[mysql]

default-character-set=utf-8

[mysqld]

character_set_server=utf-8

character_set_client=utf-8

collation_server=utf8_general_ci

重启Mysql: service mysql restart

sql :show variables like ‘%char%’;

注意事项:修改编码  只对 “之后” 创建的数据库生效,因此 我们建议 在mysql安装完毕后,第一时间统一编码。

mysql:清屏   Ctrl+L  ,  system clear

2.原理

MTSQL逻辑分厂

InnoDB(默认) :事务优先(适合高并发操作;行锁)

MYISAM:性能优先(表锁)

查询数据库引擎:支持哪些引擎? show engines;

查看当前使用引擎 show variables like ‘%storage_engine%’;

指定数据库对象的引擎:

create table tb(

id int(4) auto_increment,

name  varchar(5),

dept   varchar(5),

primary  key(id)

)ENGINE=MyISAM AUTO_INCREMENT=1  DEFAULT CHARSET=utf8 ;

3.SQL优化

原因:性能低、执行时间长、等待时间长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲、线程数)

a. SQL :

编写过程:select  dinstinct … from …join ..on …where … group by …. having  ….order by … limit …

解析过程:from ..on .. join .. where …. group by …. having  …. select … order by limit …

b. SQL优化, 主要就是 在优化索引

索引:相当于书的目录

索引:index是帮助MYSQL高效获取数据的数据结构。索引是数据结构(树:B树(默认)、hash树……)

备注(详细查询顺序和解析顺序):https://www.cnblogs.com/annsshadow/p/5037667.html

索引的弊端:

1.索引本身很大,可以存放在内存/硬盘(通常为 硬盘)

2.索引不是所有情况均适用:a. 少量数据    b.频繁更新的字段  c.很少使用的字段

3.索引会降低增删改的效率(增删改  查)

优势:1.提高查询的效率(降低IO 使用率)

2.降低CPU使用率(… order by age desc,因为B树索引 本身就是一个 好排序的结构,因此在排序时 可以直接使用  )

另:  3层Btree可以放上百万条数据。Btree:一般是指B+,数据全部存放在叶节点中。   B+树中查询任意数据次数:n次(B+树的高度)

4.索引

分类:

主键索引:不能重复。id  不能为null

单值索引:单例,age:一个表可以躲过单值索引,name。

唯一索引:不能重复。id  可以为null

复合索引:多个列构成的索引(相当于 二级目录: z:zhao)(name,age)

创建索引:

方式一:

create 索引类型  索引名 on 表(字段)

单值:

create index  dept_index on tb(dept);

唯一:

create unique  index name_index on tb(name);

复合:

create index dept_name_index on tb(dept,name);

方式二:alter table  表名  索引类型   索引名(字段)

单值:

alter table tb add index dept_index(dept);

唯一:

alter table tb add unique  index name_index(name);

复合:

alter table tb add index dept_name_index(dept,name);

注意:如果一个字段是primary key ,则改字段默认就是 主键索引

删除索引:

drop index 索引名 on 表名;

drop index name_index on tb;

查询索引:

show index from 表名;

show index from 表名 \G

5.SQL 性能问题

a.分析SQL 的执行计划:explain  ,可以模拟SQL 优化器执行SQL 语句,从而让开发人员知道自己编写的SQL状况

b.MySQL查询优化其会干扰我们的优化

优化方法,官网:https://dev.mysql.com/doc/refman/5.6/en/optimization.html

查询执行计划:explain + SQL 语句

explain  select  *  from tb;

id  :  编号

select_type: 查询类型

table:表

type :类型

possible_keys:预测用到的索引

key: 实际使用的索引

key_len:实际使用索引的长度

ref: 表之间的引用

rows:通过索引查询到的数据量 20

Extra: 额外的信息

表的执行顺序  因数量的个数改变而改变的原因:笛卡尔积

数据小的表  优先查询;

id 值不同:id 值越大越优先查询。

(2)select_type:

PRIMARY:包含子查询SQL中的 主查询(最外层)

SUBQUERY:包含子查询SQL 中子查询(非最外层)

simple:简单查询(不包含子查询、union)

derived:衍生查询(使用到了领时表)

(3)type:索引类型、类型

system>const>eq_ref>ref>range>index>all  ,要对type进行优化的前提:有索引

其中:  system 、const 只是理想情况:实际能达到ref>range

system(忽略):只有一条数据的系统表;  或  衍生表只有一条数据的主查询

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部