MySQL大表 - 查询速度很慢

时间:2016-06-14 10:54:24

标签: mysql

我有一个MySQL表AdsPOI,它具有以下结构:

 AdsPOIId  (bigint 20) PRIMARY, AUTO INCREMENT
 Distance  (int 6) not indexed
 poi_POIId (bigint 20) INDEXED, references another table POI
 ads_AdId  (bigint 20) INDEXED, references another table Ads

在此表中,目前有大约7.000.000行,但它每分钟都在增长,越来越大。该表是InnoDB表。即使我尝试对表进行最简单的查询,例如:SELECT * FROM AdsPOI ORDER BY ads_AdId,查询也需要大约20秒才能运行。当我尝试更复杂的查询时,例如SELECT poi_POIId FROM AdsPOI WHERE ads_AdId > 5 AND ads_AdId < 300000 GROUP BY poi_POIId,查询大约需要1分20秒,并返回大约130.000行。

有没有办法加快这些疑问?这些查询运行得如此之慢,这是正常的吗?我怎么能试着让它们更快?

2 个答案:

答案 0 :(得分:0)

您可以尝试通过增加innodb_buffer_pool_size来优化磁盘I / O,从而将最近访问的表移动到RAM中。

https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-diskio.html

答案 1 :(得分:-1)

您只能使用关系数据库和大量数据执行此操作。如果您已经在正确索引的表中拥有数百万个条目,并且它的增长速度很快,那么您可以预期查询会变得更慢。添加更强大的硬件是一种选择。

如果你可以在没有外键关系的情况下生活,那么针对大量数据优化的大数据NoSQL工具(如MongoDB)可能是更好的设计选择。