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

                

           

  • 相关阅读:
    word-流程图
    redis介绍
    Linux----硬盘分区
    Vue+restfulframework示例
    Django后端项目---- rest framework(4)
    前端框架VUE----导入Bootstrap以及jQuery的两种方式
    前端框架VUE----补充
    前端框架VUE----表单输入绑定
    前端框架VUE----cli脚手架(框架)
    前端框架VUE----计算属性和侦听器
  • 原文地址:https://www.cnblogs.com/water-1/p/14499918.html
Copyright © 2020-2023  润新知