加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

如何去写一手好SQL

发布时间:2019-10-28 01:30:50 所属栏目:编程 来源:今头日条一小马奔腾
导读:MySQL性能 数据表设计 索引优化 SQL优化 其他数据库 博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。其实这是非常低级的错误,我不禁后背一

join的实现是采用Nested Loop Join算法,就是通过驱动表的结果集作为基础数据,通过该结数据作为过滤条件到下一个表中循环查询数据,然后合并结果。如果有多个join,则将前面的结果集作为循环数据,再次到后一个表中查询数据。

驱动表和被驱动表尽可能增加查询条件,满足ON的条件而少用Where,用小结果集驱动大结果集。

被驱动表的join字段上加上索引,无法建立索引的时候,设置足够的Join Buffer Size。

禁止join连接三个以上的表,尝试增加冗余字段。

Limit优化

limit用于分页查询时越往后翻性能越差,解决的原则:缩小扫描范围,如下所示:

  1. select * from orders order by id desc limit 100000,10 

耗时0.4秒

  1. select * from orders order by id desc limit 1000000,10 

耗时5.2秒

先筛选出ID缩小查询范围,写法如下:

  1. select * from orders where id > (select id from orders order by id desc limit 1000000, 1) order by id desc limit 0,10 

耗时0.5秒

如果查询条件仅有主键ID,写法如下:

  1. select id from orders where id between 1000000 and 1000010 order by id desc  

耗时0.3秒

如果以上方案依然很慢呢?只好用游标了,感兴趣的朋友阅读JDBC使用游标实现分页查询的方法

其他数据库

作为一名后端开发人员,务必精通作为存储核心的MySQL或SQL Server,也要积极关注NoSQL数据库,他们已经足够成熟并被广泛采用,能解决特定场景下的性能瓶颈。

如何去写一手好SQL
如何去写一手好SQL

【编辑推荐】

  1. 半小时MySQL基础入门,值得收藏
  2. SQL查询语句总是先执行SELECT?你们都错了
  3. MySQL的又一神器-锁,MySQL面试必备
  4. MySQL实验之不同字符集数据库迁移步骤演示
  5. 看这些MySQL的重要知识点,吃透它
【责任编辑:未丽燕 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读