我有一个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行。
有什么方法可以加快这些查询吗?这些查询运行得如此缓慢,这是正常的吗?我怎么能试着让他们更快?
发布于 2016-06-14 11:01:56
您可以通过增加innodb_buffer_pool_size来优化磁盘I/O,从而将最近访问的表移到RAM中。
https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-diskio.html
发布于 2016-06-14 11:14:25
对于关系数据库和大量数据,您只能做这么多事情。如果您已经在一个正确索引的表中有数百万个条目,并且它正在快速增长,那么您可以预期查询会变得更慢。添加更强大的硬件是一种选择。
如果您可以在没有外键关系的情况下生活,那么为海量数据优化的大数据NoSQL工具(如MongoDB )可能是一个更好的设计选择。
https://stackoverflow.com/questions/37809986
复制相似问题