mysql优化积累(持续更新中)
大表数据查询 |
主从复制 读写分离 垂直拆分 水平切分 |
数据库设计和查询原则:
尽量设定主键
推荐使用自增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优化积累(持续更新中)相关推荐
- mysql参数积累 持续更新。。。
mysql参数积累 持续更新... 以下是Mysql数据库服务器配置文件my.ini的详细配置.应用场合是InnoDB引擎,2核CPU, 32位SUSE. [client] #password = y ...
- MySQL FAQs (持续更新中)
mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using EditLine wrapper 如何找MySQL的配置文件 windows下为my. ...
- mysql 练习题(持续更新中)
表名与字段名: –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_ ...
- mysql查询更新优化_mysql查询优化(持续更新中)
1.索引不会包含有NULL值的列 (1) 应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描 (2) 数据库设计时不要让字段的默认值为null,可以 ...
- 非线性优化汇总——Matlab优化工具箱(持续更新中)
非线性优化汇总--Matlab优化工具箱(持续更新中) 室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易,路过的各位大佬请点个赞 目录 非线性优化汇总--Matlab优化工具箱( ...
- 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)
写在开头 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理,github传送门 ...
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- 2020年拼多多校招面试题及答案-最全最新-持续更新中
大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员 2020年拼多多校招面试题及答案-最全最新-持续更新中 2020年拼多多校招面试题一面-牛客网 2020年拼多多校招面试题二面- ...
- 嵌入式相关开源项目、库、资料------持续更新中
学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...
最新文章
- java分布式锁解决方案 redisson or ZooKeeper
- 转载-centos网络配置(手动设置,自动获取)的2种方法
- 文件共享同步5种方式:NFS、NAS、rsync、scp、ftp
- 每天读5分钟,受益匪浅、
- Mysql中explain命令查看语句执行概况
- 基于vue的无缝滚动组件
- web前端复习系列[1]——标签
- Google Chrome,另类的邪恶垄断?
- 浏览器的控制台-----后期更新
- OPEN SQL中通配符的使用
- 在计算机中 总线简称,微机中的总线一般分为几等
- html 半框添加,配眼镜全框好还是半框的好?
- JS window对象
- html涟漪动画效果,CSS 在按钮上做个涟漪效果(Ripple Animation)
- SA-NET: Shuffle attention for DCNN 论文学习
- .net6API使用AutoMapper和DTO
- Android kotlin 大全
- 欧姆龙CP1H与三菱E740变频器 485通讯 串口网关与变频器进行modbus RTU通讯。 功能:触摸屏进行参数设置监控,变频器采用三菱E740
- CEF 拦截URL,重定向新的网址
- 2021年低压电工试题及答案及低压电工复审模拟考试
热门文章
- 关于Response.redirect和Response.End出现线程中止异常的处理
- JavaScript- 正则表达式匹配汉字
- 了解冒泡排序选择排序
- Vue中的 ref 和 $refs
- android通过c调用shmat函数,编译可在Android上运行的qemu user mode
- cad立面索引符号 规范_一套标准规范施工图包含哪些?13年深化设计师3分钟带你正确认知...
- Vue.JS项目输入框中使用v-model导致number类型值自动转换成string问题的解决方案
- Caffe2:python -m caffe2.python.operator_test.relu_op_test
- 时序分析:HMM模型(状态空间)
- ML大杂烩:**常见机器学习算法公式梳理