当前位置:数据库 > MySQL >>

mysql 千万级数据库如何进行多张结构相同的表联合查询?如何优化或设置提高查询速度?

环境是win2003(linux) + mysql + php 1. 现有近亿条记录数据,分成N个表进行存储;当然这N个表结构都一样,如何才能提高这N表的联合查询?表都建了索引; 我在一个上百万的表上进行单表查询时间几乎为0,但几个同样的表进行联合查询,结果处于假死状态,请问有什么机制可以 提高这N个表的联合查询速度? 2.如何请提高其它表 结合 这N几个表进行查询?我觉得同结构表结合查询就很慢,再结合其它不同结构表 会更麻烦些,请高 手们支招! 为便于理解我建了一个表结构出来: CREATE TABLE `test_bj` ( `id` int(10) NOT NULL, `username` char(12) default NULL, `userpwd` char(16) default NULL, `sex` int(1) default NULL, `Position` char(10) default NULL, `Remarks` char(150) default NULL, `addtime` timestamp NULL default NULL on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `s_id_atm` (`id`,`addtime`), KEY `s_all` (`id`,`username`,`userpwd`,`sex`,`Position`,`Remarks`,`addtime`) ) ENGINE=MyISAM DEFAULT CHARSET=gb2312; 字段分别为:id , username , usrepwd , sex , position, remarks, addtime (字段可根据优化需要再建或修改) 表名:test_bj,test_sh .... test_gz... test_n (假设每张有1千万记录) 每个表名 很想以地区单独分开(不想建分区表),这样方便查看和单独查询 还说明一点 select id,username,sex,addtime from ( select id,username,sex,addtime from test_bj where username like '%张%' and sex=1 union all select id,username,sex,addtime from test_sh where username like '%张%' and sex=1 union all ... select id,username,sex,addtime from test_gz where username like '%张%' and sex=1 ) order by addtime desc limit0,20 这种多表联合查询基本处于死机状态 , 这查询代码该如何写? 朋友们以上问题给我支个招吧!大家一起总结下,对后来者都是一个帮助!在此拜谢了! 不要拷贝、复制,最好给出实例代码和配置步骤
追问:多谢你的回答,我以上提的问题,Mysql有没有其它解决办法?表可多个,要联合查询,或者只能用分区表来做吗?还是像一个朋友说的 运用hash算法对同样结构的表进行计算分类后存入新表?
答案:首先要说的是创建索引会提高搜索速度
再就是 like 不会使用索引,结果就是你创建了索引但是找不到结果,这个和union没有关系
即使你单独一条查询也是遍历整个数据库,不会在索引中查询
对于这种情况一般都是通过分词创建文件索引的方式进行文字查询 如 lucene
现在的数据量,想要通过sql解决文字的like查询,通过数据库已经不够用的了~
其他:我也遇到相同的问题,我的环境是MS SQL 
greateast@qq.com 

上一个:tomcat7 windows 7系统 mysql 5.5 用JDBC连接mysql写入数据库数据时报错
下一个:mysql 数据库备份中断怎么办

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,