注意:(针对mysql5.5版本,其他版本可能略有差异)
一、在linux上安装mysql
1、https://pan.baidu.com/s/1OrVqBeBZAanx-cazwWhKXg
2、上面提供一个下载的链接,下载之后找网上的教程安装
3、验证,查看版本
mysqladmin --version
service mysql stop 停止mysql
service mysql start 启动mysql
4、一些额外的说明
chkconfig mysql on 开机自启动
chkconfig mysql off 关闭开启自启动
ntsysv 检查开机是否自动启动(可能会有问题)
ps -ef | grep mysql 通过这个可以查找到mysql数据库存放目录(可能有问题)
/var/lib/mysql 安装目录
/usr/share/mysql 配置文件
/usr/bin 命令目录(mysqladmin、mysqldump等)
清屏
crtl+L
system clear
5、在mysql5.5中的一些配置文件
Mysql配置文件
my-huge.cnf 高端服务器 1-2G内存
my-large.cnf 中等规模
my-medium.cnf 一般
my-samll.cn 较小
但是,以上配置文件mysql默认不能识别,默认只能识别/etc/my.cnf
比如需要使用my-huge.cnf,使用cp /usr/shage/mysql/my-huge.cnf /etc/my.cnf
二、mysql分层、存储引擎
1、mysql分层
2、存储引擎
InnoDB 事务优先(适合高并发操作;行锁)
MyISAM 性能优先(表锁)
查询数据库支持哪些引擎:show engines;
指定数据库对象的引擎: 可以指定使用的引擎、自增起始位置、编码
create table tb(
id int(4) auto_increment,
name varchar(5),
primary key(id)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
三、sql解析过程、索引、B+树
性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理
1、SQL
编写过程 having:过滤
select distinct from join on where group by having order by limit
解析过程
from on join where group by having select distinct order by limit
2、SQL优化:主要是优化索引
索引的弊端
1、索引本身很大,可以存放在内存/硬盘(通常为硬盘)
2、索引不是所有情况均适用
①、数据量很少
②、频繁更新的字段
③、很少适用的字段
3、索引会降低增删改的效率
索引的优势
1、提高查询效率(降低了IO使用率)
2、降低CPU使用率(适用order by时,其索引本身就已经排好序了)
3、索引分类
|——————————————|
|id| name |age |
| | | |
| | | |
| | | |
| | | |
|——————————————|
单值索引 :单列,age;一个表可以有多个单值索引
唯一索引 :不能重复,id 可以是null
主键索引 :不能重复,id 不能是null
复合索引 :多个列构成的索引(相当于二级目录,孙(先找s,然后找sun))(name age)先根据name
找,如果name相同再根据age来,有时可能只会用到name
4、创建索引
方式一:create 索引类型 索引名 on 表(字段)
单值索引
create index id_index on tb(id);
唯一索引
create unique index id_index on tb(id);
复合索引
create index name_age_index on tb(name,age);
方式二:alter table 表名 add 索引类型 索引名(字段)
单值索引
alter table tb add index id_idex(id);
唯一索引
alter table tb add unique index id_index(id);
复合索引
alter table tb add index name_age_index(name,age);
注意:如果一个字段是primary key,则该字段默认就是主键索引
5、删除索引
删除索引
drop index 索引名 on 表名;
drop index id_index on tb;
查询索引
show index from 表名;
show index from 表名 \G;
6、SQL性能问题
1、分析SQL的执行计划
explain,可以模拟SQL优化器执行SQL语句。
2、MySQL查询优化会干扰我们的优化
优化方法:https://dev.mysql.com/doc/refman/5.5/en/optimization.html
查询执行计划: explain + SQL语句
explain select * from tb;
id:编号
select_type:查询类型
table:表
type:类型
possible_key:预测用到的索引
key:实际使用的索引
key_len:根据数据库编码决定的
ref:表之间的引用
rows:优化器预估的记录扫描行数
extra:额外的信息
举例:
①、首先构造如下的表结构并插入数据
②、查询课程编号为2 或教师证编号为3的老师信息
select t.* from teacher t,course c,teacherCard tc where t.tid=c.tid and t.tcid=tc.tcid and (c.cid=2 or tc.tcid=3);
③、使用explain对该语句进行分析
在id相同的时候,table查询从上往下,故本语句执行的查询顺序为t(3条记录)——>tc(3条记录)——>c(4条记录)
④、给teacher增加3条数据
再执行一次查询的explain
table的顺序变为tc(3)——>c(c)——t(6),table执行顺序因数量个数改变,保证中间乘积最小(笛卡尔积)。数据量小的表优先查询。