请教,数据库中一张表太大,怎样提高查询速度?

数据库中一张表有千万条记录,现在有一个请求,需要查询所有记录,在不变动数据库的前提下,在写程序的时候,如何提高查询速度?是用多线程吗,如果用多线程,具体怎样实现呢?希望得到大家的指点,谢谢大家!

返回所有的记录这种事情没有什么优化的余地,如果要优化,一个是从硬件的角度进行,一个是考虑是否真的有必要一次性获取全部的数据。

这张表要建立索引吧,多线程的话已分页的形式查出来吧,首先要知道这个表中的总记录,然后设定每页的查询量,每个线程查其中表中的其中一页数据量,但要保证你服务器的内存足够保存你的千万条记录数据,不然很有可能导致内存不足

这个问题还不明确,重点是要干什么?什么需求需要千万条数据?真有这样的请求就该直接拒绝。

数据太多可以分区,
开8个线程查询select /*+ parallel(t1 8) / count()from t1;

真心地说,这种大数据查询,是要花费时间的。
原因:
1、查询只能从数据头到尾,全部循环一次;
2、分页实现,分段循环,也是从数据头到尾,全部循环了一次;
3、多线程循环,是CPU分时间段循环,大体上与单线程,二者分配的CPU时间相当,受CPU的能力限制。

解决办法:
1、分页实现;
2、多线程;
3、索引
这些,不能根本上解决问题。

所以,从硬件上解决,才是好的解决办法:
1、提高CPU速度
2、加大内在

真心地说,这种大数据查询,是要花费时间的。
原因:
1、查询只能从数据头到尾,全部循环一次;
2、分页实现,分段循环,也是从数据头到尾,全部循环了一次;
3、多线程循环,是CPU分时间段循环,大体上与单线程,二者分配的CPU时间相当,受CPU的能力限制。

解决办法:
1、分页实现;
2、多线程;
3、索引
这些,不能根本上解决问题。

第一对查询字段建立索引,这种情况下最好限制查询字段,确保字段值不为空,并且是非模糊查询。
第二分区存储数据,查询的时候默认带上分区的类别,比如按照时间段划分,就带上时间。
如果是做连接查询,可划分为分表查询,即先在程序中先将数据库中较小的表查出来,然后循环查出关联的数据,比如先查出部门,然后根据部门查处各个部门的员工,这时候一般在员工表中奖部门字段做上索引。
注意一定要分页查询。
最后记忆中解决办法做好评缓存。

特别注意排序字段一定要建立索引,或者先按照非排序字段查出数据再排序,对于like和带有空值的字段,索引无效。

数据库添加索引可以减少数据库搜索的盲目性,如果是查找常用型数据可以添加一个单点的memcached,如果是从数据库本身来提高就是提高内存容量。

大的方向就两个,一个是索引,一个是缓存。

再怎么也得全遍历,先看看需求能不能替换