| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> SQL优化的几种方式 -> 正文阅读 |
|
[大数据]SQL优化的几种方式 |
SQL优化的几种方式网上有很多关于SQL优化的文章,写的很好,但我觉得不够系统,不方便记忆。结合实际使用的一些经验,对SQL优化的功能点进行梳理、总结,方便大家使用。 一、避免操作多余数据1、使用where条件语句限制要查询的数据,避免返回多余的行。查询学生张三的成绩的年纪是否为18岁
再从查询到的结果种判断是否包含张三
2、 尽量避免select *,改使用select 列名,避免返回多余的列。查询所有18岁的学生姓名
优化后:
3、若插入数据过多,考虑批量插入。批量插入学生数据 优化前:
优化后:
原因: 4、尽量避免同时修改或删除过多数据。尽量避免同时修改或删除过多数据,因为会造成cpu利用率过高,从而影响别人对数据库的访问,建议分批操作。 5、尽量避免向客户端返回大数据量。
二、避免删库跑路6、删除数据时,一定要加where语句。这个不多说, 三、where查询字句优化7、避免在where 子句中的 “=” 左边进行内置函数、算术运算或其他表达式运算。优化前:
优化后:
原因: 8、避免在 where 子句中使用 != 或 <> 操作符。查询年龄不是18岁的学生 优化前:
优化后:
原因: 9、避免在 where 子句中使用or操作符。查询年龄为17和18岁的学生信息 优化前:
优化后:
原因: 10、where子句中考虑用默认值代替null。查询未填写城市的学生 优化前:
优化后:
原因: 11、不要在where字句中使用not in。查询年龄不是17岁的学生信息 优化前:
优化后:
原因: 11、合理使用exist & in。in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果查询的两个表大小相当,那么用in和exists差别不大,则子查询表大的用exists,子查询表小的用in。 12、谨慎使用distinct关键字。查询所有不重复的用户年龄 优化前:
优化后:
原因: 四、limit查询优化13、查询一条或者最大/最小一条记录,建议使用limit 1。查询身高最高的学生 优化前:
优化后:
14、优化limit分页。年龄从大到小,分页查询学生姓名 优化前:
优化后:
注意,此处的age字段应为唯一索引,如果不是唯一索引,会出现数据重复的问题。 原因: 五、like语句优化15、优化like语句。查询姓名包含张三的学生信息 优化前:
优化后:
原因: like语句的优化方案,我觉得很有必要新写一篇文章,后面会把链接贴过来。 六、索引优化16、查询时应避免全表扫描,首先考虑在where和order by设计的列上建立索引。
需要为age 和 height 字段加上索引。 17、使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则。存在索引:
存在下面的查询语句:
根据最左匹配原则,上面第三条查询语句,是不会走索引的。 18、索引不要超过6个。索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。 19、删除冗余和无效的索引。存在索引:
上面第二个索引属于冗余索引,需要删除掉。 20、尽量使用数字型字段。若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会 逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 21、尽可能的使用 varchar/nvarchar 代替 char/nchar。因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。 22、建议使用自增主键。参考链接: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/24 5:32:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |