- 论坛徽章:
- 0
|
问题描述
1, 表情况
现有一张约25万行的表,其中有几个字段加了索引did(主键),title,time等。
该表每天增加约10000条记录,(最终规模大概是3000万+级别,表大小50G+),所以考虑对它进行分区(注:不选择分表,因为需要改动php程序代码?!这个实现起来比较困难?!)。
2,字段情况
搜索的时候,80%情况下使用title搜索,其次是用did搜索,两者都建有索引,目前还是很快的。
did设置是int,自增
title设置是varchar(80),主要是纯数字形式字符串(例如,1234,3456,5677等,非连续),还有很少一些非数字字符串(例如,china,中国,A1233等)。
需求&思路
已经实现了按照did字段(int类型)进行hash分区,但是我认为这个似乎对sql语句(大约是select did, title, time, ... from table where title=1234)没有什么优化。
需要按照title进行分区,优化查询
语句大概是这样的:
- ..........
- PARTITION BY RANGE COLUMNS (title)
- (
- PARTITION p00 VALUES LESS THAN (0), #####存储所有非纯数字形式的title
- PARTITION p01 VALUES LESS THAN (500000), #####存储纯数字形式小于50万的title
- PARTITION p02 VALUES LESS THAN (1000000), #####存储纯数字形式小于100万的title
- PARTITION p03 VALUES LESS THAN (1500000), #####存储纯数字形式小于150万的title
- .......... #####依次类推
- PARTITION pn VALUES LESS THAN (25000000), #####存储纯数字形式小于2500万的title
- PARTITION pn+1 VALUES LESS THAN (MAXVALUE) #####存储纯数字形式大于2500万的title,预计未来1年不会超过3000万,这个以后可以再添加分区
- );
复制代码
问题
1,分区中VALUES LESS THAN (?) 里边该如何写?试了下'500000'之类不行(我不太清楚编码和范围,抱歉)
2,分区后按照where title=xxx来搜索,是直接根据索引到某个分区中提取信息的吧?
3,其他方面的优化。
谢谢啦!
|
|