mysql数据库优化小结(三)

2015-01-23 22:07:23 · 作者: · 浏览: 17
6小于11的存储区域。 partition p2 values less than(16), partition p3 values less than(21) ) insert into emp values(1,’哈哈’,1)--à数据是存储到p0区 insert into emp values(23,’呵呵呵’,15)--à数据是存储到p2区 insert into emp values(100,’嘻嘻嘻’,11)=à数据是存储到p2区。

?

测试使用取出数据时是否用到分区:

?

\

在取出数据时,条件中必须partitionby range(store_id),range里面的字段。

3、list分区与range分区有类似的地方

例子:假如你创建一个如下的一个表,该表保存有20家超市的职员记录,这20家超市的编号从1到20.而这20家超市分布在4个有经销权的地区,如下表所示:

?

?

create table emp(
   id int not null,
   name varchar(32) not null default '',
   store_id int not null
)
partition by list(store_id)(
   partition p0 values in(5,6,7,8),
   partition p1 values in(11,3,12,11),
   partition p2 values in(16),
   partition p3 values in(21)
)

\

?

注意:在使用分区时,where后面的字段必须是分区字段,才能使用到分区。

?

\

4、分区表的限制

(1)只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列

(2)最大分区数目不能超过1024

(3)如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内

(4)按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多 。

十、其他

1、选择合适的存储引擎(myisam innodb)

? MyISAM:默认的MySQL存储引擎。如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性要求不是很高。其优势是访问的速度快。(尤其适合论坛的帖子表)

? InnoDB:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM,写的处理效率差一些并且会占用更多的磁盘空间(如果对安全要求高,则使用innodb)。[账户,积分]

? Memory/heap [一些访问频繁,变化频繁,又没有必要入库的数据:比如用户在线状态]

? 说明: memory表的数据都在内存中,因此操作速度快,但是缺少是当mysql重启后,数据丢失,但表的结构在.

? 注:从mysql5.5.x开始,默认的存储引擎变更为innodb,innodb是为处理巨大数据量时拥有最大性能而设计的。它的 cpu效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

2、数据类型的选择

(1)在精度要求高的应用中,建议使用定点数来存储数值,以保证结果的准确性。decimal不要用float

(2)要用于存储手机号,哪个类型比较合适。假如我们要用char(11),如果字符集是utf8 则占用多少个字节。11*3==33,如果是gbk字符集则占用11*2=22个字节,

如果用bigint型存储,则占用8个字节,

(3)如果要存储ip地址。假如用char(15)è占用很多字节,能否用整型来存储呢?

可以通过一个函数,把ip地址转换成整数。可以使用int来存储

inet_aton():把ip地址转换成整数。

inet_ntoa():把整数转换成ip地址。

\

?

取出时:

\

?

?

(4)根据需求选择最小整数类型。比如用户在线状态:离线,在线,离开,忙碌,隐式等,可以采用0,1,2,3,5来表示,没有必要用char()或varchar()型来存储字符串。

3、myisam表的定时维护

对于myisam 存储引擎而言,需要定时执行optimize table 表名,通过optimize table语句可以消除删除和更新造成的磁盘碎片,从而减少空间的浪费。

语法格式:optimizetable 表名

清理完成碎片之后会减少空间的浪费!

?