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

在取出数据时,条件中必须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 表名
清理完成碎片之后会减少空间的浪费!
?
