大表数据查询

主从复制

读写分离

垂直拆分

水平切分

 

数据库设计和查询原则:

尽量设定主键

推荐使用自增ID,不要使用UUID

字段定义为not null而不是null

密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。

避免犯如下SQL语句错误

查询不需要的数据。解决办法:使用limit解决

多表关联返回全部列。解决办法:指定列名

总是返回全部列。解决办法:避免使用SELECT *

重复查询相同的数据。解决办法:可以缓存数据,下次直接读取缓存

是否在扫描额外的记录。解决办法:

使用explain进行分析,如果发现查询需要扫描大量的数据,但只返回少数的行,可以通过如下技巧去优化:

使用索引覆盖扫描,把所有的列都放到索引中,这样存储引擎不需要回表获取对应行就可以返回结果。

改变数据库和表的结构,修改数据表范式

优化长难的查询语句

一次性删除1000万的数据要比一次删除1万,暂停一会的方案更加损耗服务器开销。

分解关联查询,让缓存的效率更高。

执行单个查询可以减少锁的竞争。

count(*)会忽略所有的列,直接统计所有列数,不要使用count(列名)

MyISAM中,没有任何where条件的count(*)非常快。

当有where条件时,MyISAM的count统计不一定比其它引擎快。

确定ON或者USING子句中是否有索引。

确保GROUP BY和ORDER BY只有一个表中的列,这样MySQL才有可能使用索引。

优化GROUP BY和DISTINCT

这两种查询据可以使用索引来优化,是最有效的优化方法

如果不需要ORDER BY,进行GROUP BY时加ORDER BY NULL,MySQL不会再进行文件排序。

LIMIT偏移量大的时候,查询效率较低

可以记录上次查询的最大ID,下次查询时直接根据该ID来查询

UNION ALL的效率高于UNION

应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。

应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

-- 可以这样查询:

select id from t where num=10 union all select id from t where num=20

in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

-- 对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

下面的查询也将导致全表扫描:select id from t where name like ‘%李%’若要提高效率,可以考虑全文检索。

如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where num=@num

-- 可以改为强制查询使用索引:

select id from t with(index(索引名)) where num=@num

应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

-- 应改为:

select id from t where num=100*2

应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)=’abc’

-- name以abc开头的id应改为:

select id from t where name like ‘abc%’

不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

没有掌握的部分:

范式是什么意思?

超大分页优化

explain就是在执行sql语句前面加个explain,mysql执行的时候会出一个"执行分析"

慢查询的优化首先要搞明白慢的原因是什么?是查询条件没有命中索引?是load了不需要的数据列?还是数据量太大?

Reference:

[1]MySQL面试题-SQL优化

mysql优化积累(持续更新中)相关推荐

  1. mysql参数积累 持续更新。。。

    mysql参数积累 持续更新... 以下是Mysql数据库服务器配置文件my.ini的详细配置.应用场合是InnoDB引擎,2核CPU, 32位SUSE. [client] #password = y ...

  2. MySQL FAQs (持续更新中)

    mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using EditLine wrapper 如何找MySQL的配置文件 windows下为my. ...

  3. mysql 练习题(持续更新中)

    表名与字段名: –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_ ...

  4. mysql查询更新优化_mysql查询优化(持续更新中)

    1.索引不会包含有NULL值的列 (1)   应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描 (2)   数据库设计时不要让字段的默认值为null,可以 ...

  5. 非线性优化汇总——Matlab优化工具箱(持续更新中)

    非线性优化汇总--Matlab优化工具箱(持续更新中) 室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易,路过的各位大佬请点个赞 目录 非线性优化汇总--Matlab优化工具箱( ...

  6. 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)

    写在开头 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理,github传送门 ...

  7. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  8. 2020年拼多多校招面试题及答案-最全最新-持续更新中

    大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员 2020年拼多多校招面试题及答案-最全最新-持续更新中 2020年拼多多校招面试题一面-牛客网 2020年拼多多校招面试题二面- ...

  9. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

最新文章

  1. java分布式锁解决方案 redisson or ZooKeeper
  2. 转载-centos网络配置(手动设置,自动获取)的2种方法
  3. 文件共享同步5种方式:NFS、NAS、rsync、scp、ftp
  4. 每天读5分钟,受益匪浅、
  5. Mysql中explain命令查看语句执行概况
  6. 基于vue的无缝滚动组件
  7. web前端复习系列[1]——标签
  8. Google Chrome,另类的邪恶垄断?
  9. 浏览器的控制台-----后期更新
  10. OPEN SQL中通配符的使用
  11. 在计算机中 总线简称,微机中的总线一般分为几等
  12. html 半框添加,配眼镜全框好还是半框的好?
  13. JS window对象
  14. html涟漪动画效果,CSS 在按钮上做个涟漪效果(Ripple Animation)
  15. SA-NET: Shuffle attention for DCNN 论文学习
  16. .net6API使用AutoMapper和DTO
  17. Android kotlin 大全
  18. 欧姆龙CP1H与三菱E740变频器 485通讯 串口网关与变频器进行modbus RTU通讯。 功能:触摸屏进行参数设置监控,变频器采用三菱E740
  19. CEF 拦截URL,重定向新的网址
  20. 2021年低压电工试题及答案及低压电工复审模拟考试

热门文章

  1. 关于Response.redirect和Response.End出现线程中止异常的处理
  2. JavaScript- 正则表达式匹配汉字
  3. 了解冒泡排序选择排序
  4. Vue中的 ref 和 $refs
  5. android通过c调用shmat函数,编译可在Android上运行的qemu user mode
  6. cad立面索引符号 规范_一套标准规范施工图包含哪些?13年深化设计师3分钟带你正确认知...
  7. Vue.JS项目输入框中使用v-model导致number类型值自动转换成string问题的解决方案
  8. Caffe2:python -m caffe2.python.operator_test.relu_op_test
  9. 时序分析:HMM模型(状态空间)
  10. ML大杂烩:**常见机器学习算法公式梳理