MySQL优化

一、查询性能优化 重构查询方式

1、一个复杂查询还是多个简单查询

MySQL内部每秒能够扫描内存中上百万行数据,相比之下,MySQL响应数据给客户端就慢得多了。在其他条件都相同的时候,使用尽可能少的查询当然是更好的。但是有时候,将一个大查询分解为多个小查询也是很有必要的。

2、切分查询

有时候对于一个大查询我们需要“分而治之”,对于删除旧数据,如果用一个大的语句一次性完成的话,则可能需要一次性锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。将一个大的DELETE语句切分成多个较小的查询可以尽可能小地影响MySQL性能,同时还可以减少MySQL复制的延迟。例如我们需要每个月运行一次下面的查询:

 

那么可以用类似下面的办法来完成同样的工作:

 

3、分解关联查询

 

二、数据库大小

1、查询语句 得到的结果是以字节为单位,除1024为K,除1048576为M

SELECT SUM(DATA_LENGTH)/1073741824,SUM(INDEX_LENGTH)/1073741824,
(SUM(DATA_LENGTH)+SUM(INDEX_LENGTH))/1073741824
FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名';

 

2、查看数据库中各个表占用的空间大小

SELECT TABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1073741824,
TABLE_ROWS 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';

 

--全表

SELECT TABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1073741824,
TABLE_ROWS 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA='数据库名';

 

3、关于删除数据后物理空间未释放

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 。OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用 。表优化的工作可以每周或者每月定期执行,对提高表的访问效率有一定的好处,但是需要注意的是,优化表期间会锁定表,所以一定要安排在空闲时段进行。

 

 

参考资料:

《高性能MySQL》

http://blog.csdn.net/xifeijian/article/details/45460763

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值