mysql数据表长时间不进行碎片整理会占用非常大的磁盘空间,如果不清理会严重影响效率。因为delete数据之后,数据库文件并没有减小。

 
     哪类存储表需要清理碎片?
     对于MyISAM的存储引擎表,我们要定时清理碎片。
 
     清理碎片命令:optimize table tb_name
 
     最好的方案是做一个定时任务,定时的去清理碎片,这样可以优化Mysql。
 
 
 
 
 
 
 
一个庞大的数据表,我们可以添加索引来优化查询速度,如果加了索引效果还不好,这时候我们就采用分表和分区技术来做。

一般当单表的数据超过1000w条时,我们就要分表来提高速度。(这个1000w待验证)

水平分表怎么做?
举例说明,如果有个用户表,字段id,用户名等,id是自增的数字,要分三个表,可以id%3取3的模,要分100个表取id0的模就很能做到,这只是一种方法。
拆分表需要一个好的拆分条件,上面说的id是数值,取模很容易拆分,但是如果要根据用户名或者邮件来分表怎么来做才行?可以先对邮箱进行md5加密然后才取模,md5得到的是十六进制的32个字符,是十六进制的整数,同样可以取模,比如md5($email) 拆分成20个表。


垂直分表
怎么做?
垂直分表很少用到,但是也会偶尔使用,垂直分表就是把
不经常查询的字段并且该字段很大单独放到一个表中。举个例子:成绩表
id student_id question answer score
学生id 题目 答案 得分

答案我们很少去查询,但是答案是个很大字段,我们就可以分割到一个新的表中,比如:
id answer
答案


分区技术是什么?【了解】
通俗的讲分区就是将一个
海量表,分割成若干小表,这样查询的时候去对应的小表查询。
当数据是海量的,而且需要根据日期来检索,这时候合适用分区。





innodb引擎表的优化项

innodb_additional_mem_pool_size 根据项目的InnoDB表的数目相应地增加
innodb_buffer_pool_size


MyISAM引擎的优化项

key_buffer_size


3306端口被占用,修改端口

增加最大连接数

max_connections


查询缓存大小调整

query_cache_size