我有ID,startIPNum和endIPNum表。 startIPNum和endIPNum已经被转换为长字符而不是IP字符串。在startIPNum和endIPNum范围内进行IP数字查找,并使用性能优化进行休眠
下面的查询工作以及3000个3200毫秒
List<GeoIP> oneResult = new LinkedList(getHibernateTemplate().find(
"from GeoIP where "+ipNum+" >= startIpNum and "+ipNum+" <= endIpNum"));
此查询的工作和地方3000之间花费的4700毫秒
List<GeoIP> oneResult = new LinkedList(getHibernateTemplate().find(
"from GeoIP where "+ipNum+" between startIpNum and endIpNum"));
的问题是,之间需要的地方:有没有办法来优化这种查找要花很少的时间?该表有超过3'500'000条记录。
对于最长的前缀匹配IP地址查找,存在高度优化的数据结构,但它们不适合SQL数据库模型。 (见例如http://www.cesnet.cz/doc/techzpravy/2002/datastruct/datastruct.pdf) – bew 2010-11-05 14:25:58