mysql主流版本
mysql一般5.X:
5.0-5.1:早期产品的延续,升级维护
5.4-5.x:mysql整合了三方公司的新存储引擎(用的最多的是5.5和5.7)
在linux中安装一个是yum安装、tar.gz、rpm
rpm -ivh rpm软件名
如果安装的时候冲突了的话就把旧版本卸载yum -y remove xxx(软件名)了再安装
通过/usr/bin/mysqladmin -u root password 'new-password'
通过/usr/bin/mysqladmin -u root -h bigdata01 password 'new-password'
如果提示'GPG keys...'安装失败,解决方案:
执行命令:rpm -ivh rpm软件名 --force --nodoeps
验证:mysqladmin --version
启动:service mysql start
关闭:service mysql stop
重启:service mysql restart
在计算机启动后 登录MYSQL:mysql
可能会报错:'/var/lib/mysql.sock不存在'
--原因:是mysql服务没有启动
启动 服务:1.每次使用前手动启动服务 /etc/init.d/mysql start
2、开机自启开启用chkconfig mysql on ,开机自启关闭用chkconfig mysql off
给msql的超级管理员设置密码:
直接在家目录执行:/usr/bin/mysqladmin -uroot root password root
查看数据库存放目录:
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: mysql启停脚本
mysql配置文件:
my-huge.conf 高端服务器 需要1-2Gmysql内存
my-large.cnf 中等规模
my-medium.cnf 一般
my-small.cnf 较小
但是以上配置文件mysql默认不能识别,默认只能识别/etc/my.cnf
如果采用的话就cp /usr/share/mysql/my-huge.cnf /etc/my.cnf 复制到里面就可以让mysql默认识别
注意:mysql5.5默认配置文件/etc/my.cnf;mysql5.6默认/etc/mysql-default.cnf
mysql5.7的默认配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf中
mysql字符编码:
sql : show variables like 'char';
mysql 模糊查询:
sql : show variables like '%char%';
可以发现部分编码是latin需要统一设置为utf8。
设置编码:
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]服务端
default-character-set=utf8
[client]客户端
default-character-set=utf8
注意事项:修改编码只对之后创建的数据库生效,因此我们建议在mysql安装完毕后,
所以建议mysql安装完成之后第一时间修改编码!
mysql逻辑分层:连接层 服务层 引擎层 存储层
客户端访问数据库-->连接层(提供与客户端连接的服务)-->服务层(1.提供各种用户使用的接口(select)
2.提供SQL优化器(MySQL query Optimeizer))-->引擎层提供各种存储数据的方式(innodb (mysql默认引擎)(事务优先,适合高并发操作,行锁) myisam(性能优先,表锁))
-->存储层 (存储数据)
查询数据库引擎: 支持哪些引擎? show engines;
查询当前使用的引擎: show variables like '%storage_engine%';
create table tb(id int(5) auto_increment,name varchar(5),dept varchar(5),primary key(id))ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
SQL优化:
原因:性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失败、服务器参数不合理(比如缓冲区以及线程数)
sql语句:
编写过程和解析过程不一致!!!
编写过程:select ..from ..join ..on ..where ..group by ..having
解析过程:from ..on ..join ..where ..group by ..having ..select
sql优化:
sql优化主要就是优化索引(index)),索引相当于目录,索引可以加速查询的效率
索引:index是帮助mysql高效获取数据的数据结构索引是数据结构(树:B树(和二叉树一样)、hash树)
索引的弊端: 1:索引本身很大,可以存放在内存/硬盘(通常为硬盘)
2:索引不是所有情况均使用:a:少量数据 b:频繁更新的字段 c:很少使用的字段
3:索引会降低增删改的效率(增删改)
索引的优点: 1:提高查询效率(降低IO使用率)
2:降低CPU使用率(...order by age desc,因为B树索引本身就是排序好的结构,因此在排序时可以直接使用)
3层Btree可以存放百万条数据,大于2的都叫Betree,Btree可以有很多!!!Btree一般都是指B+,数据全部都放在叶节点中
B+树种查询任意的数据次数:n次(B+树的高度)
索引:
分类:
主键索引和唯一索引相似,主键索引不能none,唯一索引可以是none
单值索引:单值,age;一个表可以有多个单值索引,name。
唯一索引:不能重复id
复合索引:多个列构成的索引(相当于二级目录:z:zhao)(name,age)不是两个值必须中,可以有多个列!两个接连查询
创建索引:
方式一:
create 索引类型 索引名_index 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);
唯一:
create table tb add unique index name_index(name);
复合:
create 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
SQL性能问题:
分析sql的执行计划 :explain可以模拟sql优化器执行sql语句,从而让开发人员知道自己编写的状况
mysql查询优化其会干扰我们的优化
mysql查询