【1024程序员节】MySQL数据库的引擎、优化及去重原理

本文详细介绍了MySQL数据库的存储引擎特点,如MYISAM、INNODB和MEMORY,并提出了数据库优化的八大策略,包括选择合适的字段属性、使用JOIN替代子查询、利用UNION、事务处理、锁定表、外键、索引以及优化查询语句。同时,讨论了数据库去重的三种方法:ROWID、GROUP BY和DISTINCT。最后,对比了IN和EXISTS的性能差异,指出选择的依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL数据库的搜索引擎

MYISAM:支持3中存储方式:静态型,动态型,压缩型

优点:占用的空间小,存储的速度快

缺点:不支持事务和并发

innoDB:

优点:提供事务的支持,回滚,支持崩溃修复能力和并发控制,多版本事务并发控制

缺点:读写效率较差,占用的数据库空间较大

Memory:内存中对数据创建表,数据全部存储在内存

缺点:生命周期短

优点:读写速度非常快,对数据的安全性要求比较低的时候可以选择memory

MySQL数据库的优化

1、选取最适用的字段属性

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

2、使用连接(JOIN)来代替子查询(Sub-Queries)

MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。

3、使用联合(UNION)来代替手动创建的临时表

MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要相同。

4、使用事务来避免数据污染

它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。

事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。

5、锁定表

尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。

6、使用外键

锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。

7、使用索引

索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。

8、优化的查询语句

绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。

MySQL数据库去重的方法

数据库中的去重操作(删除数据库中重复记录的SQL语句)主要有三种方法

(1)rowid方法

(2)group by 方法

(3)distinct方法

1、rowid方法

根据Oracle带的rowid属性,可以进行判断是否存在重复语句;

2、用group by方法

主要用于分组统计,一般都是使用在聚合函数中使用;

3、用distinct方法

一般用于比较小的表进行去重,会过滤掉多余的重复记录,返回不重复的记录或字段;

4. 数据库inexist的区别,in是全表搜索吗

in 是把外表和内表作HASH JOIN,而exists是对外表作LOOP,每次LOOP再对内表进行查询。

哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法。

一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值