mysql的SQL优化以及B树

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查询

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值