我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

概述

数据库优化必须先分析再进行具体优化,前面在MySQL数据库SQL优化中介绍了一些方法,今天主要从创建表、设计表和具体的SQL优化方面介绍一些性能优化方法。

01优化了创建表时表的性能

1. 始终为每个表设置一个 ID

每个表都应有一个 ID 字段作为主键,该字段应为 INT 或 Type,并带有自动递增的标志。因为使用该类型的主键会降低性能。

这里只有一个例外,那就是“相关表”的“外键”,即表的主键是由几个单独表的主键组成的。我们称之为“外键”。例如,如果有一个带有学生 ID 的“学生表”,并且有一个带有课程 ID 的“课程表”,那么“成绩”就是“关联表”,它与学生表和课程表相关联,在成绩中,学生 ID 和课程 ID 称为“外键”,它们共同构成主键。

2. 为搜索字段编制索引

简单来说,在创建表时,如果该表的后续查询总是涉及某个字段,或者是代码中写的字段,则可以考虑创建索引。

3. 使用 ENUM 代替

ENUM类型非常快速和紧凑。实际上,它被另存为 ,但它在表面上显示为字符串。这样一来,使用这个字段来制作一些选择列表是相当完美的。

如果您有一个字段,例如“”,并且您知道这些字段的值是有限且固定的,则应使用 ENUM 而不是 。

ENUM 是 MySQL 数据库独有的字段类型,会影响迁移到其他数据库。因此,如果将来要改变数据库的情况,必须谨慎使用。

4. 尽可能使用 NOT NULL

您应该始终将字段保留为 NOT NULL,这样可以相对节省空间(NULL 也需要空格)。

5. 将 IP 地址另存为 INT

如果使用整数而不是 (15) 字段来保存 IP,则可以节省大量空间(需要编写 IP 转换函数)。

6. 必须使用 UTF8 字符集

万国码,无需转码,无乱码风险,节省空间

02设计表格时的性能优化

1. 选择合适的存储引擎

mysqlsql优化工具_mysql语句优化的几种方法_mysql sql语句优化工具

它适用于需要大量查询的应用程序,但对于大量写入来说不是很好。即使您只需要一个字段,整个表也会被锁定,在读取操作完成之前,其他进程(甚至是读取进程)都无法运行。此外,COUNT(*) 等计算速度超快。

趋势是一个非常复杂的存储引擎,对于一些小型应用程序来说,它会比 慢。他支持“行锁”,所以写入操作多一些会更好。此外,他还支持更高级的应用程序,例如交易。

相对来说,它支持事务、行级锁、更好的并发性能,以及 CPU 和内存缓存页面优化,这使得资源利用率更高,因此在大多数情况下最好使用引擎。

2.固定长度的桌子会更快

表中不包括以下类型的字段:TEXT、TEXT、BLOB。只要包含这些字段之一,那么该表就不是“固定长度的静态表”,因此MySQL引擎将以不同的方式处理它。

固定长度的表提高了性能,因为MySQL搜索速度更快,而且由于这些固定长度的表很容易计算下一段数据的偏移量,因此它们自然可以更快地读取。如果字段不是固定长度的,那么每次想要查找下一个条目时,程序都需要查找主键。

此外,固定长度的表更易于缓存和重新生成。但是,唯一的副作用是固定长度的字段会浪费一些空间,因为无论您是否使用它们,固定长度的字段都会分配大量空间。

3. 垂直细分

垂直分割是一种将数据库中的表变成列中的多个表的方法,可以降低表的复杂度和字段的数量,从而达到优化的目的。(因为现在的公司经常一个表里有很多字段,太复杂了,这也是后面需要划分的东西)。

示例 1:Users 表中有一个字段是家庭住址,此字段是可选的,在数据库中操作时,除了个人信息外,您不需要经常读取或覆盖此字段。那么为什么不把他放在另一张桌子上呢?这将使您的表具有更好的性能,并且在许多情况下,只有用户 ID、用户名、密码、用户角色等才会频繁用于用户表。较小的表总是表现更好。

示例 2:有一个名为“”的字段,每次用户登录时都会更新该字段。但是,每次更新都会导致清空表的查询缓存。因此,您可以将此字段放在另一个表中,这样它就不会影响您不停地读取用户 ID、用户名和用户角色,因为查询缓存将帮助您大大提高性能。

另外,需要注意的是,你不会经常加入这些分隔字段形成的表,否则性能会比不分割时差,而且极数会下降。

03优化SQL语句

1.使用查询缓存

检查是否开启了缓存

mysql> select @@query_cache_type;

mysql语句优化的几种方法_mysql sql语句优化工具_mysqlsql优化工具

开启缓存,修改f,最后添加,重启MySQL生效

query_cache_type = 1
query_cache_size = 600000

开启MySQL查询缓存可以大大降低数据库服务器的CPU使用率,开启前约为120%,开启后降至10%。但是,使用查询缓存有很多限制。如果使用方案是只读的,并且更新很少,请考虑启用查询缓存。

2. 当只有一行数据时,使用 LIMIT 1

在这种情况下,添加 LIMIT 1 可以提高性能。这样,MySQL数据库引擎在找到一段数据后将停止搜索该数据,而不是继续搜索与记录匹配的下一段数据。

3. 联接表时使用等效类型的示例并对其进行索引

如果有许多 JOIN 操作,则应对 JOIN 的字段进行索引,并且这些字段的类型应保持一致。

4. 避免*

从数据库读取的数据越多,查询速度就越慢。因此,有必要养成服用所需物品的好习惯。

5. 拆分大的 OR 语句

如果您需要在在线网站上执行大量查询,则需要非常小心,以避免相应的操作会相应地停止整个网站。因为这两个操作会锁表,所以一旦锁表,其他操作就无法进入。

执行这么大量的 and 可以分几个部分执行,每个部分的执行都暂停并再次执行。

04 其他

1. 您的询问

使用关键字将使您了解MySQL如何处理SQL语句。这可以帮助您分析查询语句或表结构中的性能瓶颈。

查看行列可以让我们发现潜在的性能问题。

2. 从 () 获取建议。

()将允许MySQL分析字段及其实际数据,并提供一些有用的建议(只是建议)。只有当表中有实际数据时,这些建议才会变得有用,因为您需要有数据才能做出一些重大决策。

mysql>select * from mysql.user procedure analyse();

mysql语句优化的几种方法_mysql sql语句优化工具_mysqlsql优化工具

二维码
扫一扫在手机端查看

本文链接:https://by928.com/1748.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线