zoukankan      html  css  js  c++  java
  • mysql优化小技巧

    需要提前掌握的知识:关于explain显示的字段的具体含义;简单介绍一下

    id:执行顺序,id越大,执行优先级越高,id相等,顺序执行(从上到下)

    select_type:查询类型,有simple、subquery、union、 derived等等

    table:查询表名

    type:类型(重要字段,判断性能的标准之一)(大致的排序,中间有其他类型,此处为常见类型)system>const>eq_ref>ref>range>index>all

    possible_keys:可能涉及到的索引

    key:用到的索引

    key_len:可能的索引长度(可用来判断用到了覆合索引的几个字段)

    ref:参数的类型,如果where字段里面有等于,并且加入了判断,就是const

    rows:sql语句的扫描行数

    extra:附加信息(判断是否优化的标准之一)using where、using index(看见这个说明用到索引,性能不错)、using filesort(需要优化)、using temporary(紧急优化)

    一、优化技巧

    转载一下别人的博客

    https://blog.csdn.net/qq_41408088/article/details/105445629

    (1)小表驱动大表

    例如:学生信息(包含年级信息id 1)、年级信息(年级信息id 1与年级名 大一 之类)

    明显学生信息表是大表、年级信息表是小表

    最好的情况是 年级信息表驱动学生信息表

    create index idx_student_classid;

    select * from class left join student on class.id = student.classId;

    在student表建立索引,class表可以利用索引去驱动student表

    (实际测试情况会有出路,是因为class里面是主键id,explain分析的type会是eq_ref)

    当然,如果索引由于不可抗力建在了class表上,需要灵活变通,使用没有索引的基准表驱动有索引的表

    left join 或者 right join 灵活使用

    (2)小表驱动大表最多使用情况是对 in 和 exists 优化

     仍然是需要建立索引

    具体原理简单理解

     后期再深入理解

    (3)关于order by的优化

    order by的排序在老版本是双路排序,两次IO操作,新版本单路排序,一次IO(描述的十分浅显,可百度一下)但是,当取出的数据无法通过单路排序一次性取出时,会造成多次IO操作,性能不如双路排序,此时需要调整mysql数据库的sort_buffer_size 和 max_length_for_sort_data 参数调优

    禁止select *

    禁止order by age asc, id desc 这种排序出现,此时不会使用到索引(即使是覆合索引的两个字段)

    group by 先分组再排序

    (4)varchar类型使用时不打单引号建议等公司主动辞退你,还可以捞补偿金,不打单引号会使索引失效,同时行级锁变成表级锁

    (5)行级锁的本质还是索引,只不过锁的索引的索引值!

    (6)间隙锁。。。

  • 相关阅读:
    python3 爬虫继续爬笔趣阁 ,,,,,,,
    sql server 能按照自己规定的字段顺序展示
    文件下载功能django+js
    Django 实现文件下载
    队列,循环队列,乒乓队列区别
    文件系统常用操作(df, du)
    Raw与ProRes Raw(二、深入挖掘)
    图片格式入门(RAW, TIFF, JPEG)
    什么是ProRes Raw?(一、管中窥豹)
    linux的top命令分析
  • 原文地址:https://www.cnblogs.com/aoligei/p/15107842.html
Copyright © 2011-2022 走看看