| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql -> 正文阅读 |
|
[大数据]mysql |
优化原则: 1)sql优化和索引>数据表结构>系统配置>硬件 2)sql执行顺序
1.按照执行顺序调整表连接顺序及字段结构 1)多表关联时小表在前,大表在后(from后的表关联查询是从左到右执行的,第一张表会进行全表扫描) 2)where替换having,havaing中一般用组函数作为过滤条件,where后不能放组函数 3)where字句连接顺序,where自左向右自上而下的解析where子句,因此将条件数据多的放在前边 2.按照索引进行优化 1)了解索引结构 mysql 1.1哈希索引 1.2b+tree索引 聚簇索引? innodb 非聚簇索引? myisam 2)适合建立索引的字段 where 以及group by后连接的字段 离散度大的字段 我们先来看一个重要的属性列的离散度,公式如下:
-- 列的全部不同值个数:所有数据行行数 数据行数相同的情况下,分子越大,列的离散度就越高。简单来说,如果列的重复值越多,离散度就越低,重复值越少,离散度就越高 3)避免索引失效 3.1大量数据下避免模糊查找,尽量后模糊查找 如果必须头模糊则可以选择INSTR(str,substr)进行匹配; 3.2避免使用in,not in范围查找,避免全表的一个扫描 如果时连续数值,可以采用between and 来代替 如果不是连续数据,可以选择exist来进行代替; 3.3避免使用or尽量使用union代替or; 3.4避免对null值字段进行判断,可以将null字段设置为0,对数值进行判断; 3.5避免在条件语句where 后的等号左侧使用运算符表达式、函数操作; 3.6避免where 1=1操作 3.7查询条件不能用不等号,如果必须使用则考虑其他字段; 3.8联合索引,依照最做匹配原则,当语句中存在第一个条件不是联合索引时,会失效; 3.其他场景的sql优化 1)增删改dml进行优化,语句短减少网络传输io
2)查询时复杂查询可以使用临时表暂存数据 3)join语句代替子查询,因为不会创建中间表 4)如果没有去重要求尽量使用union all ,因为union all会加上dinstinct做数据唯一性校验,消耗高 5)拆分复杂sql为多个小sql,避免大事务 6)分页查找优化 1.索引(覆盖索引优化):只需要索引字段就可以查到对应数据 select id from table limit 10000,1; 2.条件语句查询: select * from table where id>=(select id from table limit 10000,1) limit 100; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:09:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |