扫码关注公众号

数据库之优化相关
10-20
824观看
01

有哪些优化 SQL 的策略?

优化COUNT查询COUNT是一个特殊的函数,它可以统计某个列值的数量,在统计列值时要求列值是非空的,不会统计NULL值。如果在COUNT中

来自:数据库事务和优化-优化的常用规则
02

mysql EXPLAIN 的字段有哪些,具有什么含义?

执行计划是SQL调优的一个重要依据,可以通过EXPLAIN命令查看SQL语句的执行计划,如果作用在表上,那么该命令相当于DESC。EXPLA

来自:数据库事务和优化-优化的常用规则
03

说一说你对数据库优化的理解

MySQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。例如,通过优化文件系统,提高磁盘I\O的读写速度;通过优化操作系统调度策略,提高MySQL在高负荷情况下的负载能力;优化表结构、索引、查询语句等使查询响应更快。针对查询,我们可以通过使用索引、使用连接代替子查询的方式来提高查询速度。针对慢查询,我们可以通过分析慢查询日志,来发现引起慢查询的原因,从而有针对性的进行优化。针对插入,我们可以通过禁用索引、禁用检查等方式来提高插入速度,在插入之后再启用索引和检查。针对数据库结构,我们可以通过将字段很多的表拆分成多张表、增加中间表、增加冗余字段等方式进行优化。

来自:数据库事务和优化-优化的常用规则
04

怎样插入数据才能更高效?

影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。针对这些情况,可以分别进行优化。对于MyISAM引擎的表,常见的优化方法如下:禁用索引对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引。如果插入大量数据,建立索引会降低插入记录的速度。为了解决这种情况,可以在插入记录之前禁用索引,数据插入完毕后再开启索引。对于空表批量导入数据,则不需要进行此操作,因为MyISAM引擎的表是在导入数据之后才建立索引的。禁用唯一性检查插入数据时,MySQL会对插入的记录进行唯一性校验。这种唯一性校验也会降低插入记录的速度。为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启。使用批量插入插入多条记录时,可以使用一条INSERT语句插入一条记录,也可以使用一条INSERT语句插入多条记录。使用一条INSERT语句插入多条记录的情形如下,而这种方式的插入速度更快。INSERTINTOfruitsVALUES(‘x1’,‘101’,‘mongo2’,‘5.7’),(‘x2’,‘101’,‘mongo3’,‘5.7’),(‘x3’,‘101’,‘mongo4’,‘5.7’);使用LOADDATAINFILE批量导入当需要批量导入数据时,如果能用LOADDATAINFILE语句,就尽量使用。因为LOADDATAINFILE语句导入数据的速度比INSERT语句快。对于InnoDB引擎的表,常见的优化方法如下:禁用唯一性检查插入数据之前执行setunique_checks=0来禁止对唯一索引的检查,数据导入完成之后再运行setunique_checks=1。这个和MyISAM引擎的使用方法一样。禁用外键检查插入数据之前执行禁止对外键的检查,数据插入完成之后再恢复对外键的检查。禁用自动提交插入数据之前禁止事务的自动提交,数据导入完成之后,执行恢复自动提交操作。

来自:数据库事务和优化-优化的常用规则
05

表中包含几千万条数据该怎么办?

建议按照如下顺序进行优化:优化SQL和索引;增加缓存,如memcached、redis;读写分离,可以采用主从复制,也可以采用主主复制;使用MySQL自带的分区表,这对应用是透明的,无需改代码,但SQL语句是要针对分区表做优化的;做垂直拆分,即根据模块的耦合度,将一个大的系统分为多个小的系统;做水平拆分,要选择一个合理的shardingkey,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带shardingkey,将数据定位到限定的表上去查,而不是扫描全部的表。

来自:数据库事务和优化-优化的常用规则
课程
专栏
数据库-数据库事务和优化-优化的常用规则
3专栏
1课程
5 试题