1.优化表的数据类型:
表须要使用何种数据类型是须要根据应用来判断的。虽然应用设计的时候须要考虑字段的长度留有必定的冗余,
可是不推荐让不少字段都存有大量的冗余,这样既浪费磁盘存储空间,同时在应用程序操做时也浪费物理内存。
在mysql中,可使用函数PROCEDURE ANALYSE()对当前应用的表进行分析,
该函数能够对数据表中列的数据类型提出优化建议,
用户能够根据应用的实际状况考虑是否实施优化。
如: select * from warning_repaired PROCEDURE ANALYSE()\G;mysql
范例:sql
建表:
数据库
----------------------------------------------------------------------------------------------------------------------------------------+ | warning_repaired | CREATE TABLE `warning_repaired` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_moid` varchar(36) NOT NULL, `device_name` varchar(128) DEFAULT NULL, `device_type` varchar(36) DEFAULT NULL, `device_ip` varchar(128) DEFAULT NULL, `warning_type` enum('0','1','2') NOT NULL, `domain_moid` varchar(36) NOT NULL, `domain_name` varchar(128) DEFAULT NULL, `code` smallint(6) NOT NULL, `level` varchar(16) NOT NULL, `description` varchar(128) DEFAULT NULL, `start_time` datetime NOT NULL, `resolve_time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=980390 DEFAULT CHARSET=utf8 |
插入数据:dom
……函数
查看表优化:优化
select * from warning_repaired PROCEDURE ANALYSE()\G;
*************************** 10. row ***************************
Field_name: nms_db.warning_repaired.level
Min_value: critical
Max_value: normal
Min_length: 6
Max_length: 9
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 8.0004
Std: NULL
spa
Optimal_fieldtype: ENUM('critical','important','normal') NOT NULL设计
能够看出level,Min_value,Max_value, Min_length, Max_length, Avg_value_or_avg_length, 由于level的值只有三种:ciritical, important, normal,因此Optimal_fieldtype:建议使用ENUM类型。code
2.经过折分提升表的访问效率
这里所说的“折分”,是指对数据表进行折分。若是针对MyISAM类型的表进行,那么有两种折分方法。
(1)第一种方法是垂直折分,即把主码和一些列放在一个表,而后把主码和另外的列放到另外一个表中。
若是一个表中某些列经常使用,而另外一些列不经常使用,则能够采用垂直折分,另外,垂直折分可使数据行变小,一个数据页就能存放更多的数据,在查询时就会减小I/O次数。其缺点是管理冗余列,查询全部数据须要联合(JOIN)操做。
(2)第二种方法是水平折分,即根据一列或多列数据的值把数据行放到两个独立的表中。
水平折分一般在如下几种状况下使用。
1)表很大,分割后能够下降在查询时须要读数据和索引的页数,同时下降了索引的层数,提升查询速度。
2)表中的数据原本就有独立性,例如,表中分别记录各个地区的数据或不一样时期的数据,特别是有些数据经常使用,而另一些数据不经常使用。
3)须要把数据存放到多个介质上。
例如:移动电话的帐单就能够分红两个表或多个表。最近3个月的帐单数据存放在一个表中,3个月前的历史帐单存放 在另外一个表中,超过1年的历史帐单能够存储到单独的存储介质上,这种折分是最经常使用使用的水平折分方法。
水平折分会给应用增长复杂度,它一般在查询时须要多个表名,查询全部数据须要UNION操做。在许多数据库应用中,这种复杂性会超过它带来的优势,由于只要索引关键字不大,则在索引用于查询时,表中增长2~3倍数据量,查询时也就增长读一个索引层的磁盘次数,因此水平折分须要考虑数据量的增加速度,根据实际状况决定是否须要对表进行水平折分。
orm
3. 逆规范化
暂略
4. 使用中间表提升统计查询速度 对于数据量较大的表,在其上进行统计查询一般会效率很低,而且还要考虑统计查询是否会对在线的应用产生负面影响。一般在这种状况下,使用中间表能够提升统计查询的效率。 中间表在统计查询中常常会用到,其优势以下: (1)中间表复制源表部分数据,而且与源表相"隔离",在中间表上作统计查询不会对在线应用产生负面影响。 (2)中间表上能够灵活的添加索引或增长临时用的新字段,从而达到提升统计查询效率和辅助统计查询做用。