Mysql数据库优化—1

注意:(针对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执行顺序因数量个数改变,保证中间乘积最小(笛卡尔积)。数据量小的表优先查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值