【查询优化相关】

1.如何定位相关慢的查询:

a.可以开启慢查询日志,也可以使用show profiles 去记录相关查询到一个临时表再分析。

b.show processlist  看看有没有大量等待的进程之类的。

c. desc 或者 explain 详细看一下某条sql的索引使用情况,影响行数等。

2.如何进行优化:

a.查询时,用对索引,减少大量无用的行数扫描。 以及所查即所需,尽量不要使用select * ,制定好使用的列,避免大量冗余数据扫描。以及大量重复查询,在应用层做一下缓存。

b.分解部分复杂的查询变成相关少量的多条, 可以提高缓存效率,单挑查询减少锁的竞争等。

c. 特定类型相关优化,尽量不用子查询,用关联或者拆分代替,count(*),加*号会不扫描列,只扫描行。

【具体索引优化】

1.insert多次插入的时候选择批量插入。

2.%开头的Like无法使用索引。

3.数据类型隐式转换无法使用索引。int 转 string 这种

4.如果mysql使用索引时比全表扫描慢则不使用索引,扫描行数超过30%一般就会不用索引了。(也是避免了频繁的普通索引和聚集索引的切换)

5.大的文本或超长字段不要建索引。

6.垂直分表,水平分表相关,这时候一般可以考虑人为生成主键id,单要维持顺序。

7.避免null字段 原因如下:

(1)所有使用NULL值的情况,都可以通过一个有意义的值的表示,这样有利于代码的可读性和可维护性,并能从约束上增强业务数据的规范性。

(2)NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。(null -> not null性能提升很小,除非确定它带来了问题,否则不要当成优先的优化措施)

(3)NULL值在timestamp类型下容易出问题,特别是没有启用参数explicit_defaults_for_timestamp

(4)NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回永远为空结果,查询容易出错

【聚集索引和其他索引】

1.Mysql 主键索引和其他 索引的区别:

a. 主键索引天生唯一,而且不能有null值,唯一索引虽然也唯一,但是可以为null。

b.主键索引属于聚集索引,存储结构中存了主键索引的id以及行记录(B+树的叶子节点,叶子节点也就是没有子节点的节点。),而其他索引的存储结构中,存的是索引内容以及主键聚集索引的值,查的时候通过索引再结合主键索引指向的位置获取数据。

c.(再顺带说一下为什么主键一般自增,因为自增的话就不用去改变节点的结构,只需要在最后追加就行,不然就要不断调整数据的物理地址分页等,加大io损耗)。

【其他】

1. count(1) 和 count(*) 和 count(name) 的区别

count(1) 和 count(*) 无任何区别,因为()里的不是字段名 也非null。 如果count(null)  则直接等于0 不扫表了。

count(name) name是字段名,这样的话如果name字段为null的就不会计算在总数中。

MySQL优化查询相关的更多相关文章

  1. MySQL优化查询 5.7版本

    1. 变更参数 : query_cache_type 如果何配置查询缓存: query_cache_type 这个系统变量控制着查询缓存工能的开启的关闭.query_cache_type=0时表示关闭 ...

  2. mysql慢查询相关

    如何查看执行较慢的sql: 1.使用show variables like '%query%'; 查询结果: ft_query_expansion_limit 20have_query_cache Y ...

  3. mysql 优化的相关配置:总结中...

    centos 为例:mysql 怎么获取配置参数信息: /etc/my.cnf; /etc/myql/my.cnf/; 家目录:或者指定目录:作用域 客户端:全局 set global 会话 set[ ...

  4. mysql优化查询

    使用索引查询 MariaDB [test]> explain select * from te where id=22; #在没有增加索引情况下,rows为7,即查询行数 +------+--- ...

  5. MySql优化方案

    mysql优化方案总结 u       Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索 ...

  6. Mysql相关知识点梳理(一):优化查询

    EXPLAIN解析SELECT语句执行计划: EXPLAIN与DESC同义,通过它可解析MySQL如何处理SELECT,提供有关表如何联接和联接的次序,还可以知道什么时候必须为表加入索引以得到一个使用 ...

  7. 深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

  8. mysql explain的使用(优化查询)

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 1.创建数据库 创建的sql语句如下: /* Navicat MySQL D ...

  9. MySQL优化技巧之五(mysql查询性能优化)

    对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...

随机推荐

  1. css中background合写样式

    body { background: url("img_tree.png") no-repeat fixed 50% 50%/cover #ffffff ; } 等价于 body ...

  2. SpringBoot-属性配置yaml自定义属性和值

    SpringBoot-属性配置yaml自定义属性和值 SpringBoot-属性配置yaml自定义属性和值 在SpringBoot中yml/yaml文件可以自定义一些属性,以供注入给自定义bean对象 ...

  3. [题解] LuoguP2764 最小路径覆盖问题

    传送门 好久没做网络流方面的题发现自己啥都不会了qwq 题意:给一张有向图,让你用最少的简单路径覆盖所有的点. 考虑这样一个东西,刚开始,我们有\(n\)条路径,每条路径就是单一的一个点,那么我们的目 ...

  4. centos7安装google-chrome和chromedriver

    1.root用户下进入到etc/yum.repos.d目录下  [root@f7d6b9f2-1291-4d2f-8805-aef94deac9f7 yum.repos.d]# pwd  /etc/y ...

  5. SQL注入过WAF(11.4 第三十三天)

    WAF是什么? Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如D ...

  6. delphi dll编写与调用

    dll代码: mydll.dpr library mydll; uses System.SysUtils, System.Classes, uFunction in 'uFunction.pas'; ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-italic

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. 5分钟搞懂:JWT(Json Web Token)

    https://www.qikegu.com/easy-understanding/892 JWT 基于token的用户认证原理:让用户输入账号和密码,认证通过后获得一个token(令牌),在toke ...

  9. java基础源码 (4)--reflect包-AnnotatedElement接口

    接口:AnnotatedElement * Represents an annotated element of the program currently running in this * VM. ...

  10. 使用apply调用函数

    实现函数 calllt,调用之后满足如下条件1.返回的结果为调用fn之后的结果2.fn的调用为calllt的第一个参数之后的全部参数 方法1 使用es6 function calllt(...para ...