美文网首页
mysql优化

mysql优化

作者: guideEmotion | 来源:发表于2019-10-04 16:09 被阅读0次

    一 linux环境安装mysql

    下载地址:https://dev.mysql.com/downloads/file/?id=487404
    安装教程:https://www.cnblogs.com/xxoome/p/5864912.html

    增加密码

    # 进入mysql安装目录
    ./bin/mysqladmin -u root password 123456
    

    查看数据存放目录

    ps -ef|grep mysql
    

    数据库目录:datadir
    pid文件目录:--pid-file

    安装目录

    1、 数据库目录
    /var/lib/mysql/
    2、 配置文件
    /usr/share/mysql(mysql.server命令及配置文件)
    3、 相关命令
    /usr/bin(mysqladmin mysqldump等命令)
    4、 启动脚本
    /etc/rc.d/init.d/(启动脚本文件mysql的目录)

    二 原理

    分层

    MySQL逻辑分层.png

    注意:SQL优化器
    我们写的sql并不一定是真正执行的sql

    引擎

    • InnoDB 事务优先,(适合高并发操作,行锁)
    • MyISAM 性能优先(表锁)

    show engines 支持哪些引擎

    show variables like '%storage_engine%'; 看你的mysql当前默认的存储引擎:

    show create table 表名;你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):

    三 索引必看

    MySQL索引原理及设计
    MySQL索引总结

    四 explain

    image.png

    id

    select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序

    image.png
    id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越执行

    select_type

    查询的类型,主要是用于区别普通查询、联合查询、子查询的复杂查询

    image.png

    type

    system>const>eq_ref>ref>range>index>ALL

    eq_ref
    读取本表中和关联表表中的每行组合成的一行。除 了 system 和 const 类型之外, 这是最好的联接类型。当连接使用索引的所有部分时, 索引是主键唯一非 NULL索引时, 将使用该值
    eq_ref 可用于使用 = 运算符比较的索引列。比较值可以是常量或使用此表之前读取的表中的列的表达式。在下面的示例中, MySQL 可以使用 eq_ref 连接(join)ref_table来处理:

    explain select u.cust_name,s.id from cst_customer u inner JOIN schools s on u.cust_name = s.user_name;
    
    image.png

    possible_keys

    显示可能应用在这张表中的索引,一个或多个。
    查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

    key

    实际使用的索引。如果为NULL,则没有使用索引

    四 单表优化

    编写过程和解析过程

    image.png
    我们需要根据解析过程来设计索引(select在最后面,所以他用到的字段不能是复合索引的起始字段)

    小结

    因为最佳左前缀原则,我们将容易索引失效的字段放在复合索引的后面

    五 多表优化

    小表驱动大表

    image.png

    以上两个for循环,最终都会循环3000次;但是对于双层循环来说:一般建议, 将数据小的循环放外层;数据大的循环放内层


    image.png

    六 索引失效

    image.png

    上面的错误纠正(重要)

    在mysql5.7中

    1. is null、is not null、<>、!=都会使用索引.一般为range或ref级别
    2. or也会用到索引,就是range级别(对一个属性使用会or,感觉和范围查询差不多,对复合索引中的多个属性使用or不会使用索引。)

    like中使用覆盖索引

    image.png
    其实还是没用到索引,只是用了索引树来查询,快一点(index级别)。

    七 order和索引

    image.png

    备注

    这里记得不是很全,可以和尚硅谷的mysql高级资料配合使用

    参考

    1. https://www.jb51.net/article/155350.htm

    相关文章

      网友评论

          本文标题:mysql优化

          本文链接:https://www.haomeiwen.com/subject/djtplctx.html