如何优化大数据量表的查询,尤其是两个表关联查询。

这里提供一种解决思路。

采用临时表或临时表变量,把两个表或者其中一个表筛选出一部分数据放到临时表中,然后再进行连接查询。

临时表存储于内存中,只用于做查询操作,避免了其他用户的增、删操作锁定表的性能消耗。

在执行表查询操作的时候,要加s锁,被加了s锁的表,其他用户只能进行查询操作,而不能进行修改删除操作。也就是说:被加了s锁的表,还能被s锁,但不能加x锁。

创建临时表就能及时释放s锁,以供后来用户使用。一定程度防止耗时的查询阻塞其他用户。

基本的封锁类型有两种

排它锁(X锁)和共享锁(S锁).

所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...

所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁

若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A.

 

还有一种解决大量数据的思路是分割表。

对于过千万的数据,往往不会存储到一张表中,而是分割开来。

如果每天都生成大量的数据,可以把此表按日期进行拆分,创建一触发器,定点把每天的数据导入到带日期的历史表中,这些表专供查询。

这样的话虽然总记录有几千万,但分到不同的表中,数据就小了很多,这样按日期查询指定的表,速度就不会太慢了。

 

也有看网友的一篇解决方法,留下链接,方便以后查阅