当前位置: 首页 > news >正文

mysql查询优化非索引_mysql 查询优化和索引使用心得

-- sql优化案例

-- 1.not in 用left join on 替换

-- 2.like '%XXX%' 用 like 'XXX%' 替换

-- 3.limit 优化 实用,在分页中

EXPLAIN SELECT * FROM CSP_POI_SEND c ORDER BY c.SEND_ID LIMIT 999999,10;  -- 3278348

EXPLAIN SELECT * FROM CSP_POI_SEND c WHERE c.SEND_ID >= 1000000  ORDER BY c.SEND_ID LIMIT 10;

-- 4.count(*) 统计优化,注意在生产库中不要使用,会锁表

EXPLAIN SELECT COUNT(*) FROM CSP_CTC_CONTACT ;  -- 7002616

EXPLAIN SELECT COUNT(*) FROM CSP_CTC_CONTACT c WHERE c.CONTACT_ID > 0 ;  -- 增加辅助索引

EXPLAIN SELECT COUNT(DISTINCT c.CALLER_ID) FROM CSP_CTC_CONTACT c ;

EXPLAIN SELECT COUNT(*) FROM ( SELECT DISTINCT c.CALLER_ID FROM CSP_CTC_CONTACT c) temp ; -- 增加distinct

-- 5.or优化 用UNION ALL 替换

EXPLAIN SELECT * FROM CSP_CTC_CONTACT c WHERE c.CID = '45822' OR c.CALLER_ID = '18676555302';

EXPLAIN SELECT * FROM CSP_CTC_CONTACT c WHERE c.CID = '45822' UNION ALL SELECT * FROM CSP_CTC_CONTACT c WHERE c.CALLER_ID = '18676555302';

-- 6.使用 ON DUPLICATE KEY UPDATE 主键冲突判断,冲突则update,不冲突则insert,

INSERT INTO tabless VALUES(3, 'd') ON DUPLICATE KEY UPDATE id=id+1;

-- 7.去掉不必要的排序 如:order by a.title desc

-- 8.不必要的嵌套select 查询

-- 9.不必要的表自身连接

-- 10.用where子句替换having子句(只会在检索出所有记录后才对结果集进行过滤,用于集合函数的比较,如count())

-- 合理使用索引:

1.每次写入表中时,如插入,更新,删除,都会去更新索引,加大开销;

2.只有当某列被用于WHERE子句时,索引才会有用;  --- 这个地方要时刻记住

3.合理使用联合索引,见下面说明;

4.字段使用函数,将不能使用索引;

5.致命的无引号导致全表扫描,无法用到索引; -- 注意字符类型 一定要加

6.当取出的数据量超过表中数据量的20%,优化器就不会使用索引,而是全表扫描;

7.考虑不为某些列建立索引;  -- 如性别,2个均匀分布的值,全表扫描更快;

8.order BY 和 GROUP BY 优化: -- 重点:一条sql只能有一个索引,有多条索引,优化器会选择那个最优的,可以考虑建立联合索引;

9.mysql 5.6支持EXPLAIN UPDATE/DELETE;

10.mysql5.6 开启MBR后查询性能提升,支持Muti-RANGE READ 索引优化,SELECT VERSION();

11.mysql5.6支持一条SQL用2个索引,支持INDEX CONDITION pushdown ICP索引合并。

-- 联合索引又叫复合索引。要遵循最左侧原则。

对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。

例如索引是KEY INDEX (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

两个或更多个列上的索引被称作复合索引。

利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。

复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。

如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;

仅对后面的任意列执行搜索时,复合索引则没有用处。

如:建立 姓名、年龄、性别的复合索引。

CREATE TABLE test(

a INT,

b INT,

c INT,

KEY a(a,b,c)

);

优: SELECT * FROM test WHERE a=10 AND b>50

差: SELECT * FROM test WHERE b>50

优: SELECT * FROM test ORDER BY a

差: SELECT * FROM test ORDER BY b

差: SELECT * FROM test ORDER BY c

优: SELECT * FROM test WHERE a=10 ORDER BY a

优: SELECT * FROM test WHERE a=10 ORDER BY b

差: SELECT * FROM test WHERE a=10 ORDER BY c

优: SELECT * FROM test WHERE a>10 ORDER BY a

差: SELECT * FROM test WHERE a>10 ORDER BY b

差: SELECT * FROM test WHERE a>10 ORDER BY c

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY a

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY b

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY c

优: SELECT * FROM test WHERE a=10 AND b=10 ORDER BY a

优: SELECT * FROM test WHERE a=10 AND b>10 ORDER BY b

差: SELECT * FROM test WHERE a=10 AND b>10 ORDER BY c

相关文章:

  • mysql ab复制延时_MySQL AB复制详述
  • Java将MySQL数据写入json_Java实现将json中的数值插入到mysql中
  • mysql部署模型_proxysql-单主模型MGR部署
  • python 报表打印预览_python学习笔记之wxpython打印预览
  • python动态规划算法最大k乘积_动态规划最大K乘积问题
  • python实现语音播放失败_PyAudio alsa错误消息
  • python更新pip管理员权限_PIP升级权限被拒绝Windows 10
  • redis监听mysql数据库数据_天兔监控服务器和mysql,redis等监控
  • 第二部分 Mysql数据库管理_第二篇 数据库MySql
  • mysql 从库基于主库binlog恢复_MySQL利用binlog来恢复数据库
  • python可迭代对象相关的内建函数_第八章 Python可迭代对象、迭代器和生成器
  • mysql workbench连接jsp_JSP连接sql server2000数据库
  • 爱可生 mysql监控_数据库Prometheus 数据采集3-爱可生
  • java分割_Java中分割字符串的两种方法实例详解
  • java https 证书_JavaHTTPS客户端证书认证
  • Google 是如何开发 Web 框架的
  • 收藏网友的 源程序下载网
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 2017年终总结、随想
  • angular2开源库收集
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C++入门教程(10):for 语句
  • crontab执行失败的多种原因
  • CSS居中完全指南——构建CSS居中决策树
  • EventListener原理
  • k8s如何管理Pod
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • node-glob通配符
  • vagrant 添加本地 box 安装 laravel homestead
  • 安卓应用性能调试和优化经验分享
  • 包装类对象
  • 电商搜索引擎的架构设计和性能优化
  • 飞驰在Mesos的涡轮引擎上
  • 复杂数据处理
  • 关于字符编码你应该知道的事情
  • 基于web的全景—— Pannellum小试
  • 聊聊hikari连接池的leakDetectionThreshold
  • 面试总结JavaScript篇
  • 浅谈Golang中select的用法
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 项目实战-Api的解决方案
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • zabbix3.2监控linux磁盘IO
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #etcd#安装时出错
  • #FPGA(基础知识)
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2)STL算法之元素计数
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (备忘)Java Map 遍历
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552