页:
[1]
|
问一个多表查询取记录集的问题?
[size=4]我有一个数据检索的表单,某一些检索条件会针对某个特定的表。最后是从多个数据表中检索数据,然后取这些数据的交集就是我最后的检索结果。
>问题1:这些要取数据的表记录都比较多,大概都在100w左右,这样分别按条件检索数据再取交集会比较慢,甚至运行不了。有没有更好的算法(实现方法)?
>问题2:能不能用缓存的方式,去减少数据库的压力?应该怎么去实现?
>请大家帮忙看看,有没有什么更好的解决方案![/size] |
| seakingx | 2007-3-6 09:25 AM |
|
问题2我不懂
问题1,可以试着按类别或者时间分表。然后按查询条件对不同的分表进行查询。 |
| hackiss | 2007-3-14 06:06 AM |
|
| 有高手进来讨论讨论啊!!! |
| hackiss | 2007-3-15 02:31 AM |
|
| 求……求…求助!~~!~~~ |
| hackiss | 2007-3-15 05:11 AM |
|
| 请进来的签名! |
| cdcomic | 2007-3-15 09:55 AM |
|
问题1:尽量做好数据库的索引,外键之类的,或者分表,分段执行
问题2:squid可以满足你 |
| hackiss | 2007-3-16 03:15 AM |
|
| squid肯定不行,要除了数据量大以外,还要考虑大流量用户的访问。 |
| hackiss | 2007-3-17 01:17 AM |
|
| 大家帮忙回帖吧???? |
| hackiss | 2007-3-19 05:29 AM |
|
| 大家帮忙吧。谢谢 谢谢 谢谢了!~!~~ |
| ChinaID | 2007-3-20 05:55 AM |
|
| 看来是比较复杂,如果上百万的数据,通常都是从硬件或者是换用更强效的Oracle。 |
| hackiss | 2007-3-21 07:06 AM |
|
| 谢谢!!! |
|
表的ENGINE是什么类型的.几个表联合查询? 表结构设计是否合理
可以用heap去处理
mysql_query('drop table if exists my_heap');
mysql_query('create table if not exists m_heap(select * from table1 as t1 , table2 as t2 where t1.id=t2.id//这部分为联合查询的记录,以后在用可以直接从内存表中取出来)');
mysql_query('alter table m_heap ENGINE=heap'); |
|
取交集的话,建议建立查询结果集,再做索引。
把结果ID保存为数组,
然后对数组取交集,就不会出现多表查询了,又可缓解数据库压力。
本人做的网站数据有1000万以上,查询速度还是很快。 |
| davidnick | 2007-4-8 02:59 AM |
|
不知道你所说的数据表是不是同样结构的表
如果是MyISAM类型的表,mysql可以merge,将多个表合并为一个表,对这个虚拟表进行操作,但是100万的数据,进行复杂查询,速度还是会比较慢。
我自己有做类似的系统,是将数据分表存储,每个表10万数据,然后按需要merge相应的表进行查询。
merge操作很快,没有对数据作物理结构改变。 |
| Phoenix59sky | 2007-4-11 08:03 AM |
|
| 用存储过程,全文索引。 |
|
[quote]原帖由 [i]hackiss[/i] 于 2007-3-16 11:15 AM 发表
squid肯定不行,要除了数据量大以外,还要考虑大流量用户的访问。 [/quote]
啥意思? |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.006494 second(s), 2 queries |