mysql 的使用与sql 优化

安装: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(忽略):只有一条数据的系统表;  或  衍生表只有一条数据的主查询

            

       

原文地址:https://www.cnblogs.com/water-1/p/14499918.html