本节内容:
mysql分表查询
mysql 分表是为了加快插入和查询的速度,分表之后,查询和插入操作会分配到多个表,即使有排队,队列的长度就会小很多。
创建一个mysql 存储过程,建立 100 个表 ,具有相同的结构:
复制代码 代码示例:
create procedure test()
begin
declare a int;
set a = 99;
while a >= 0 do
set @a = concat('create table urls_',a,'(`idx` int(11) NOT NULL AUTO_INCREMENT,`url_crc` char(10) NOT NULL,`url` varchar(100) NOT NULL,`title` varchar(500) DEFAULT '',`server` varchar(100) DEFAULT '',PRIMARY KEY (`idx`)) ENGINE=
innodb DEFAULT CHARSET=ucs2');
prepare stmt from @a;
execute stmt;
set a = a-1;
end while;
end
//
然后插入时,根据数据的 crc32() 值 对 100 取余 来确定要插到哪一张表里。
查询时,可以将这些表都 union 起来查询。
创建存储过程:
复制代码 代码示例:
-- 查询所有的记录
create procedure test()
begin
declare a int;
set a = 99;
set @a='';
while a >= 0 do
set @a = concat(@a,'select * from urls_',a,' union ');
set a = a-1;
end while;
set @a = substring(@a,1,length(@a)-length(' union '));
select @a;
prepare stmt from @a;
execute stmt;
end
//