我有一个包含IP范围的3,000,000行的表格及其相应的国家,地区(省)和城市。该表在MyISAM引擎中。MySQL:从MyISAM转换到InnoDB使查询更快......?
我写了一个脚本,通过IP为用户提取地理位置,其中一些查询花费了17秒。然后,我将该表转换为InnoDB,并重新尝试查询过程,一些已知费时的问题查询在性能方面显着提高,最短只需0.02秒。尽管仍然有查询需要2到3秒才能完成,但查找大约1000个IP地址所花费的时间大约是以前在MyISAM引擎上运行时间的一半。
我在网上做了一个比较MyISAM和InnoDB的搜索,但是所有我读过的文章都认为MyISAM在SELECT查询上比InnoDB快。但是,根据我所看到的,我的桌子不是这种情况。有没有人有任何理论为什么?我的表没有FK约束,没有PK,通过将IP与每行的'ip_start'和'ip_end'列进行比较来完成查找。如果IP在该范围内,该行将匹配。下面是一个示例查询在我的脚本:
SELECT country, region, city FROM ip_location WHERE ip_start<=1177798832 AND ip_end>=1177798832 LIMIT 1;
您是否比较了两个引擎的缓存/密钥大小? InnoDB可以被允许比MyISAM更高的限制。 – 2012-03-12 16:43:48
@MarcB那么你是在谈论MySQL放入缓存以便快速访问的数据大小? – 2012-03-12 17:06:16
是的,mysql中的每个引擎都可以拥有自己的缓存/缓存/限制,独立于其他引擎。 innodb通常比myisam稍慢,但是如果inno得到(比如说)2x的缓冲区空间,那么这会掩盖放缓并出来更快可能 – 2012-03-12 23:15:02