分区如下CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LIST(store_id)
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);
这个是参考手册里的例子
现在只有4个分区,比如我的业务需要有200个分区,那么在做如下查询的时候,会从分区受益
select * from employees where store_id=3;只会扫描分区pNorth。但并不是所有的查询都会指定分区的,比如:
select * from employees where fname ='admin';
这样的查询,即使在fname上建了索引,效率还是很低,因为要扫描所有的分区,200个。这是分区带来的负面影响。我的问题是,怎么样处理分区带来的副作用?
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LIST(store_id)
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);
这个是参考手册里的例子
现在只有4个分区,比如我的业务需要有200个分区,那么在做如下查询的时候,会从分区受益
select * from employees where store_id=3;只会扫描分区pNorth。但并不是所有的查询都会指定分区的,比如:
select * from employees where fname ='admin';
这样的查询,即使在fname上建了索引,效率还是很低,因为要扫描所有的分区,200个。这是分区带来的负面影响。我的问题是,怎么样处理分区带来的副作用?
解决方案 »
- 再次求助一个查询语句关于范围的
- 再次请教一个SQL语句的编写
- 1062 duplicate entry 的问题啊~但是比较奇怪的是........
- 关于mysql数据恢复的一个问题。
- 如何以UTF8的形式插入一条记录到MySQL数据库
- MYsql的启动与关闭问题!
- 奇怪:怎么我在redhat9上装了mysql后,然后用mysqlcc去连接mysql,竟然不行?
- my.ini setup中那六个选项mysqld-shareware,mysqld.exe,mysqld-max.exe mysqld-opt.exe......有什么区别?应该用哪一个?
- 那里有JDBC sqlserver驱动下载,不是MYSQL
- mysql查询速度问题
- 存储过程报错,不知道错在哪里?求指教
- 事务中update的问题。
用1个字段(NID,INT)保存fname所在分区,按NID分区
比如 admin1 在1分区
admin2 在2分区
admin3 在3分区select nid from tt where fname ='admin';select * from tt where nid=(select DISTINCT nid from employees where fname ='admin');
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);
select * from employees where store_id in(3,2,4);
这样是否会快一些
这个200倍怎么来的?profiling出来的吗是去200个文件找,但是每个文件只有二百分之一原来大小吧
如果只有一个文件,那么1次IN就搞定了。