我有一个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行。
有没有办法加快这些疑问?这些查询运行得如此之慢,这是正常的吗?我怎么能试着让它们更快?
答案 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)可能是更好的设计选择。