注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

MySQL索引原理及SQL优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……继续阅读 »

彭东稳 4个月前 (08-28) 963浏览 0评论 5个赞

MySQL CASE和IF语句使用

SQL语句中的case语句与高级语言中的switch语句,是标准SQL的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作。 首先,让我们看一下CASE的语法。在一般的SELECT中,其语法格式如下: CASE <单值表达式> WHEN <表达式值> THEN <SQL语句或……继续阅读 »

彭东稳 5个月前 (07-25) 953浏览 0评论 1个赞

MySQL SELECT查询之GROUP BY优化

一、GROUP BY Optimization GROUP BY操作在没有合适的索引可用的时候,通常先扫描整个表提取数据并创建一个临时表,然后按照GROUP BY指定的列进行排序。在这个临时表里面,对于每一个group的数据行来说是连续在一起的。完成排序之后,就可以发现所有的GROUPS,并可以执行聚集函数(aggregate function)。可以看到,……继续阅读 »

彭东稳 5个月前 (07-12) 1593浏览 0评论 2个赞

MySQL SELECT查询之ORDER BY优化

一、使用索引来满足ORDER BY 为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法,因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度。下面我通过一些典型的SQL来说明哪些SQL可以利用索引减少排序,哪些SQL不能。 假设t1表存在索引:idx_k_c(k,c),……继续阅读 »

彭东稳 6个月前 (06-13) 1158浏览 0评论 2个赞

MySQL常见的SQL优化案例

前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢,CPU打满等情况。阿里云RDS专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见SQ……继续阅读 »

彭东稳 6个月前 (06-09) 1062浏览 0评论 1个赞

SQL优化之INSERT、UPDATE、DELETE

一、优化INSERT语句 为了优化插入速度,将许多小型操作组合成一个大的操作。理想情况下,您进行单个连接,一次发送许多新行的数据,并延迟所有索引更新和一致性检查,直到最后。 插入行所需的时间由以下因素确定,其中数字表示大致比例: 连接:(3) 向服务器发送查询:(2) 解析查询:(2) 插入行:(1×行大小) 插入索引:(1×索引数) 结束:(1) 假设……继续阅读 »

彭东稳 7个月前 (05-15) 1411浏览 0评论 1个赞

MySQL使用HeidiSQL工具改库名

HeidiSQL是一款数据库管理工具,它是德国程序员Ansgar Becker和几个Delphi程序员开发的一个开源工具。支持通过多种方式连接管理 MySQL(MariaDB)、MSSQL Server、PostgreSQL数据库,功能强大,完全免费,推荐大家使用。HeidiSQL比起其他客户端工具而言,支持显示库表的索引大小和数据大小,并且支持改库名(是通……继续阅读 »

彭东稳 7个月前 (05-08) 1580浏览 0评论 2个赞

MySQL多表更新或删除案例

我们用到最多的update更新数据都是单表更新了,但有的时候我们不得不使用关联多表进行数据更新了,下面我给各位介绍利用upate实现多表关联更新。另外需要注意的是MySQL从4.0.4版本开始才支持执行一个包含多个表的UPDATE的语句。 下面给出我的实验环境 环境不涉及什么业务场景,纯粹为了达到测试UPDATE语句的效果,所以不要问这么更新有什么?在生产环……继续阅读 »

彭东稳 7个月前 (05-05) 845浏览 0评论 1个赞

SQL中的in、not in、exists及not exists的区别

一、in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in。 例如:表A(小表),表B(大表) ……继续阅读 »

彭东稳 7个月前 (05-03) 1046浏览 0评论 1个赞

SQL问题之隐式转换详解

一、什么是隐式转换? 索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换。当数据库中出现访问表的SQL无索引导致全表扫描,如果表的数据量很大,扫描大量的数据,应用请求变慢占用数据库连接,连接堆积很快达到数据库的最大连接数设置,新的应用请求将会被拒绝导致故障发生。隐式转换是指SQL查询条件中的传入值与对应字段的数据定义不一致导致索引无法……继续阅读 »

彭东稳 8个月前 (04-26) 820浏览 0评论 1个赞

MySQL InnoDB外键约束详解

一、外键使用 在MySQL 3.23版本后,InnoDB引擎类型的表支持了外键约束,外键主要用于引用和参照完整性的约束检查。外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。但是外键的使用是有一些必要条件的: 1. 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2. 外键列必须建立……继续阅读 »

彭东稳 8个月前 (04-18) 1376浏览 0评论 1个赞