
搞定 MySQL
文章平均质量分 85
MySQL 数据库基础知识以及性能优化要点。
岛上码农
Flutter爱好者,上架过百万级用户App(App Store分类排名前30),搞过后端开发。
展开
-
MySQL 高级特性(一):数据表分区概念及机制
当数据表过大时,通过普通的查询优化技巧已经无法大幅度提升性能,此时往往需要进行分区分表优化。分区其实是将一张逻辑上统一的表在物理上划分成了多张表。原创 2022-03-01 20:32:36 · 574 阅读 · 0 评论 -
MySQL 数据表优化设计(九):如何设计统计数据表?
有些时候,改进数据表查询性能的最佳方式是在同一张数据表中冗余一些继承的数据。然而,有些时候需要新建完全独立的统计或缓存数据表,尤其是在需要反复查询的需求情况下。如果业务允许一些时间上的误差的话,那么这种方式会更好。缓存型数据表通常在统计数据时会经常用到,因此也会叫统计性数据。举个例子来说,对于员工、部门数据表而言,我们可能会需要查询一个部门下有多少员工。这时候有三种方式实现:在部门下增加一个员工数量的字段,每次对员工进行增、改、删操作时都需要同步更新员工数量(如果员工换部门,则需要更新多个部门的员.原创 2022-02-17 20:48:46 · 1595 阅读 · 0 评论 -
MySQL数据表优化设计(八):范式和反范式数据库设计说的是啥?
范式和反范式数据库设计本身的理念是值得参考的,我们可以更清楚地知道数据库该如何设计。在实际开发过程中,需要根据实际业务来决定主要遵循那种方式。原创 2022-01-18 21:38:17 · 806 阅读 · 0 评论 -
MySQL 数据表优化设计(七):常见的数据表设计误区整理
在实际设计数据表的过程中,除了需要考虑每个字段的数据类型之外,还需要考虑存储空间大小。对于常用的一些字段,如时间、标题、备注等,最好是内部形成一定的规范,大家遵照规范执行,增加校验能够避免很多问题原创 2022-01-08 22:37:48 · 997 阅读 · 0 评论 -
MySQL 数据表优化设计(六):id 该如何选择数据类型?
为 id 列选择一个好的数据类型非常重要,id 列会经常用于做比较,以及用于查找其他列。而且,id 也经常用于外键。因此,id 列的数据类型不仅仅关系自身数据表,也关系到与之关联的数据表。原创 2022-01-06 21:01:32 · 6964 阅读 · 0 评论 -
MySQL 数据表优化设计(五):如何选择一个合适的时间类型?
从安全稳妥的角度考虑,建议还是优先选择 DATETIME 类型,虽然相比 TIMESTAMP 会牺牲一点性能,但是 TIMESTAMP 的时间范围是硬伤。原创 2022-01-04 22:49:09 · 423 阅读 · 0 评论 -
MySQL数据表优化设计(四):利用枚举节省存储空间
枚举因为使用1-2个字节的整型存储字段值,因此存储空间会更小。但实际返回的结果需要从对应表找,会有一定的性能损耗。在实际应用中,还有一种更为实际的做法,就是将枚举值当做整型存储到数据表。原创 2022-01-03 12:01:11 · 1043 阅读 · 1 评论 -
MySQL 数据表优化设计(三):CHAR 和 VARCHAR 要优先选择 VARCHAR 吗?
在实际数据表设计中,大多数情况下会选择使用 VARCHAR,但 VARCHAR 需要额外的1-2个字节存储字符串长度。对于固定长度、长度很短或长度变化很小的字符类型,推荐使用 CHAR 类存储。原创 2022-01-01 21:10:25 · 947 阅读 · 1 评论 -
MySQL 数据表优化设计(二):数值字段类型如何选择?
MySQL 中有多种类型存储数值,需要从存储空间大小、数值范围、精确度、计算性能等多方面考虑。总而言之,要依据业务考虑如何选择存储类型。原创 2021-12-30 21:35:08 · 918 阅读 · 0 评论 -
MySQL 数据表优化设计(一):选择合适的数据类型
MySQL支持大量的数据类型,选择正确的类型对性能十分关键。本篇介绍了MySQL 的数据类型选择原则,可以根据这些基本的原则确定数据表字段的具体数据类型。原创 2021-12-28 21:13:08 · 808 阅读 · 0 评论 -
MySQL索引优化策略(八):减少索引和数据的碎片化
二叉树索引可能导致碎片化,进而影响数据库性能。碎片化的索引存储性能很弱或在磁盘上不是有序的。使用二叉树索引去超找页节点时本身就需要随机的磁盘访问,因此随机访问是二叉树索引的特性,而并不是异常。原创 2021-12-27 21:16:33 · 1175 阅读 · 0 评论 -
MySQL索引优化策略(七):索引和数据表维护
使用合适的数据类型完成数据表创建和建立索引后,工作并没有完结——你需要去维护数据表和索引以保证它们运行良好。数据表维护的主要目的是查找和修复冲突,维护精确的索引统计和减少碎片。原创 2021-12-26 16:44:17 · 717 阅读 · 0 评论 -
MySQL索引优化策略(六):通过实例快速了解如何构建数据表索引
理解索引概念最简单的方式是通过一个案例来进行,本篇通过实例讲解如何构建数据表索引,提高性能。原创 2021-12-25 21:25:59 · 548 阅读 · 0 评论 -
MySQL索引优化策略(五):为什么覆盖索引的性能很高?
一个通常的建议是为WHERE条件创建索引,但这其实是片面的。索引应当为全部查询设计,而不仅仅是WHERE条件。索引确实能有效地查找数据行,但MySQL也能够使用索引获取列数据。原创 2021-12-23 21:13:46 · 1542 阅读 · 1 评论 -
MySQL索引优化策略(四):聚集索引和非聚集索引数据结构及优劣对比
聚集索引并不是一个单独的索引类型,实际上是一种数据存储的方式。聚集索引的实现细节各有不同,在InnoDB引擎中,聚集索引实际上是将索引和数据行使用同样的结构存储在一个二叉树中。原创 2021-12-22 20:59:06 · 1494 阅读 · 1 评论 -
MySQL索引优化策略(三):索引列的次序该如何排列更合适?
在众多困扰索引使用的原因中,其中最常见的一个是索引中列的次序。正确的次序依赖于使用索引的查询,因此需要考虑怎样选择索引次序以便数据行的排序分组能够从中受益。原创 2021-12-21 21:10:04 · 1915 阅读 · 2 评论 -
MySQL索引优化策略(二):多个索引是建立独立索引还是建联合索引?
通常会对多列索引缺乏理解,常见的错误是将很多列设置独立索引,或者是索引列使用错误的次序。原创 2021-12-20 22:41:08 · 1689 阅读 · 1 评论 -
MySQL 索引优化策略(一):隔离数据列和前缀索引
正确地创建和使用索引对于查询性能十分重要。由于存在很多种特殊场景的优化和行为,因此有很多种方式去有效选择和使用索引。因此,决定如何使用索引这一项技能是需要经验和时间的积累去培养的。原创 2021-12-19 22:21:32 · 466 阅读 · 1 评论 -
MySQL 查询优化(十):冷门知识 — MySQL自定义变量
MySQL 是可以自定义临时变量的,而临时变量在做查询优化和静态查询分析时十分有用。而实际上很少有人记得 MySQL 的自定义变量。原创 2021-12-18 21:12:06 · 1640 阅读 · 1 评论 -
MySQL 查询优化(九):分页查询优化技巧
在有分页查询的应用中,包括 LIMIT 和 OFFSET 的查询十分常见,而且几乎每个都会有一个 ORDER BY 子句。如果使用索引排序的话将对性能优化十分有帮助,否则服务端需要做很多文件排序。原创 2021-12-17 21:02:57 · 855 阅读 · 1 评论 -
MySQL 查询优化(八):分组查询该怎么优化?
分组查询时最好是使用索引列分组,若无需指定次序可以使用 ORDER BY NULL 进行优化。倘若不按索引列分组的时候,则需要考虑变通的办法,并且考虑是否要使用子查询替代。原创 2021-12-13 21:39:43 · 2128 阅读 · 1 评论 -
MySQL查询优化(七):MySQL 的 count (*)真的很低效?
优化COUNT函数的查询在 MySQL 中最容易被误解的话题中能够排进前10名,我们可以在网上搜索了解更多关于 COUNT 优化的误解信息。在进行优化前,理解 COUNT 到底做了什么很重要。原创 2021-12-12 17:29:50 · 1556 阅读 · 1 评论 -
MySQL 查询优化(六): MySQL 的查询优化排序优化机制
MySQL 有时候会在排序的时候直接丢弃掉不需要的数据行来提高效率。不管怎么样,排序也需要小心使用,很可能会导致存储占用的飙升最终导致系统负荷过大。原创 2021-12-11 20:46:37 · 1047 阅读 · 1 评论 -
MySQL 查询优化(五):一文搞懂联合查询优化机制
联合查询优化器视图以最低完成代价构建一个查询执行树。如果有可能,它会从全部的单表计划开始,检查所有可能的子树组合。原创 2021-12-10 09:57:06 · 1004 阅读 · 1 评论 -
MySQL 查询优化(四):深入了解 MySQL查询优化处理过程
MySQL查询优化需要经过解析、预处理和优化三个步骤。在这些过程中,都有可能发生错误。本篇文章不会深入讨论错误处理,而是帮助理解 MySQL 执行查询的方式,以便可以写出更好的查询语句。 解析器和预处原创 2021-12-07 08:04:26 · 376 阅读 · 1 评论 -
MySQL查询优化(三):深度解读 MySQL客户端和服务端协议
如果需要从 MySQL 服务端获得很高的性能,最佳的方式就是花时间研究 MySQL 优化和执行查询的机制。一旦理解了这些,大部分的查询优化是有据可循的,从而使得整个查询优化的过程更有逻辑性。下图展示了 MySQL 执行查询的过程:客户端将 SQL 语句发送到服务端。服务端检查查询缓存。如果缓存中已有数据,则直接返回缓存结果;否则,将 SQL 语句传递给下一环节。服务端解析、预处理和优化 SQL 语句后,传递到查询优化器中形成查询计划。查询执行引擎通过调用存储引擎接口执行查询计划。服务端将查询结果原创 2021-12-06 21:24:45 · 932 阅读 · 3 评论 -
MySQL查询优化(二):重写查询语句优化性能的三种策略
在优化存在问题的查询时,我们需要改变方式去获取查询结果,从而提高查询性能,减少锁表。通过三种策略重写查询语句可以提升查询效率。原创 2021-12-05 15:05:46 · 612 阅读 · 1 评论 -
MySQL查询优化(一):如何分析查询性能?
在尝试编写快速的查询语句前,务必记住快速都是基于响应时间进行评估的。查询语句是一组由多个子任务组成的大任务,每一个子任务都会消耗时间。为了优化查询,我们要尽可能地减少子任务的数量,或让子任务执行得更快!原创 2021-12-04 11:31:49 · 309 阅读 · 1 评论 -
数据库学习Day2——创建、插入、查询、排序与分组
<br />创建自增属性的字段(使用关键字AUTO_INCREMENT):<br />CREATE TABLE cities(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,<br /> name VARCHAR(100),<br /> pop INT,<br /> founded DATE);<br />然后往里插入时,id会自动增1:<br />INSERT原创 2010-08-24 21:46:00 · 165 阅读 · 0 评论 -
数据库学习Day3——运算符与通配符
<br />选择所有数据:<br />SELECT * FROM table_name;<br /><br />mySQL中的运算符基本和C/C++等编程语言相同。<br />部分不同的有:<br />不等于<>(也可以使用!=)<br />逻辑与AND(也可以使用&&)<br />逻辑或OR(也可以使用||)<br />逻辑非NOT(也可以使用!)<br />可以使用括号改变计算的优先级。<br />例如对于如下表单:<br />+----+------------原创 2010-08-25 22:10:00 · 231 阅读 · 0 评论 -
数据库学习Day5——全文搜索(Boolean模式)+表单锁定
<br />测试表单(fulltext_sample):<br />+---------------------------+<br />| copy |<br />+---------------------------+<br />| It appears good from here |<br />| The fureture and the past |<br />| I love you |<br />原创 2010-08-28 10:18:00 · 255 阅读 · 0 评论 -
Day6(2010-08-28)(函数、外部加载和导出-批处理)
MySQL中的函数与C和Perl等其他编程语言中的函数相似。函数接受零个或者多个参数,并返回某个值。例如SQRT(16)返回的结果为4。在MySQL的SELECT语句中,函数可以用于两种方式:测试表单(events):+-------+------------+| name | date |+-------+------------+| call | 2010-08-28 || learn | 2010-08-27 |+-------+----------原创 2010-08-31 12:46:00 · 180 阅读 · 0 评论 -
Day7(2010-08-30)(账户管理)
<br />对于数据操作,会有不同的角色,例如DBA(数据库管理员),设计者,开发者,测试人员,用户等等。<br />对于不同的角色,出于安全考虑,其权限是不同的。赋予权限的语句有GRANT,例如赋给用户Li查询<br />表单book的权限:<br />GRANT SELECT ON book TO Li;<br />MySQL提供的特权有:<br />ALTER:提供了改变现有表结构能力,条件是该语句不会影响索引。<br />CREATE:允许用户创建表和新数据库,只要该用户不创原创 2010-08-31 12:46:00 · 198 阅读 · 0 评论 -
Day7(2010-08-30)(索引和查看查询性能)
<br />对于大型的数据表,对经常搜索的内容创建索引将改善查询的速度,创建索引需要<br />使用CREATE INDEX语句,使用EXPLAIN SELECT语句可以显示查询的方式。对于<br />book表单:<br />+----+-----------------+--------+-------+<br />| ID | title | author | pages |<br />+----+-----------------+--------+-----原创 2010-08-31 12:47:00 · 176 阅读 · 0 评论 -
Day8(2010-08-31)(在Visual Studio中编程访问MySQL数据库)
<br />在Visual Studio中编程访问MySQL数据库比较麻烦,因为需要导入MySQL提供的API,<br />不过知道了怎么操作之后也就简单了。主要是配置项目的编译环境。因为需要使用<br />mysql.h这个头文件,因此首先需要下载Windows下的MySQL源码包,下载地址如下<br />(选那个100多M的,10多M的只是源码,没有库):<br />http://www.mysql.com/downloads/cluster/<br />下载完解压,为了方便,我把解原创 2010-08-31 12:48:00 · 502 阅读 · 0 评论 -
数据库学习Day4——全文搜索
<br />向表中添加新的字段(列)<br />ALTER TABLE Document ADD(title VARCHAR(100) NOT NULL);<br />将第一行的title改为"home page":<br />UPDATE Document SET title = 'home page' WHERE url = 'index.html';<br /><br />全文搜索:<br />首先创建数据库表单需要将类型设置为MyISAM。<br />CREATE TABLE原创 2010-08-28 10:16:00 · 164 阅读 · 0 评论 -
数据库学习Day1——基本命令操作
<br />所有命令以分号结束。<br /><br />创建数据库:CREATE DATABASE (DATABASE NAME,数据库名称);<br />切换使用的数据库:USE (DATABASE NAME,数据库名称);<br />删除数据库:DROP DATABASE (DATABASE NAME,数据库名称);<br />显示数据库中的表单:SHOW TABLES;<br />插看表单内容:DESCRIBE (TABLE NAME,表单名称);<br /><br /><br /原创 2010-08-23 19:28:00 · 204 阅读 · 0 评论