Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使我的查询选择速度超过200万条记录_Java_Mysql_Sql_Hql_Mysql Workbench - Fatal编程技术网

Java 如何使我的查询选择速度超过200万条记录

Java 如何使我的查询选择速度超过200万条记录,java,mysql,sql,hql,mysql-workbench,Java,Mysql,Sql,Hql,Mysql Workbench,在这里,我需要一个解决我的问题的方法。我有一个表,其中包含200万条与地理坐标相关的记录。要从表中获取特定行,查询执行时间将为24秒。在这里,我想为我的应用程序方面选择500条以上的记录。因此,任何人都可以为我的查询提供更快的解决方案 质疑 您需要在start\u ip和end\u ip列上创建索引。有关语法和不同类型的索引,请参见 如注释中所述,可视化解释还可以帮助您确定如何改进查询。您可以比较添加索引之前和之后的两种解释,以了解它们的不同之处。对于此特定查询,我建议使用如下组合索引: CRE

在这里,我需要一个解决我的问题的方法。我有一个表,其中包含200万条与地理坐标相关的记录。要从表中获取特定行,查询执行时间将为24秒。在这里,我想为我的应用程序方面选择500条以上的记录。因此,任何人都可以为我的查询提供更快的解决方案

质疑


您需要在
start\u ip
end\u ip
列上创建索引。有关语法和不同类型的索引,请参见


如注释中所述,可视化解释还可以帮助您确定如何改进查询。您可以比较添加索引之前和之后的两种解释,以了解它们的不同之处。

对于此特定查询,我建议使用如下组合索引:

CREATE INDEX map_ix1 ON myproject.MAP (end_ip, start_ip);
如果这是唯一的组合,
创建唯一索引…

另外,不要在查询中使用*。如果您需要所有列,那么(为了可维护性)显式声明这些列更好。还可以考虑覆盖索引(包含查询中访问的所有列的索引):


您的查询似乎有误:为什么要将IP地址作为数字值与任何内容进行比较?IP地址不是可以进行有意义比较的东西

但是,由于您已经在使用地图数据(如lat、long等),这意味着您应该使用空间扩展。好消息是,空间索引允许您非常高效地执行这类查询。您应该已经在
(lat,long)
上创建了空间索引,或者使用
(lat,long)
作为复合类型
-这允许您快速执行基于坐标的搜索


如果仍要比较IP地址,可以将tuple
(start\u IP,end\u IP)
视为空间
,并对属于指定范围的该点执行搜索。这将为您提供尽可能高的性能。您可以阅读有关空间扩展的更多信息

显示您的一些查询,这样每个人都可以轻松地调整您的查询queries@PandiyanCool补充道query@AnkitBajpai我想在所有行中选择一行。如何将选择限制在500。在
start\u ip
end\u ip
上创建索引。这应该会加快速度。同时发布表结构(即,表上存在哪些数据类型和索引)使用工作台中的解释(和可视化解释)功能来帮助确定如何改进此查询。正如Ean所建议的,添加这些索引,您会注意到解释计划发生了变化。研究解释和索引以获取更多信息。是学习索引和调优的一个很好的免费资源。它还提供了不同数据库的示例。对于单值查询,执行速度很快…但选择20个值会再次占用太多时间…每个查询占用事务开始时间:1403241044326 milleseconds事务结束时间:1403241077426 milleseconds。总时间为:54315 m/s@AravindCheekkallur选择超过20个值是什么意思?@Ean这里我将ip转换为一个数字,然后使用该数字执行查询。索引后,单个数字的搜索速度更快。但我有100多个IP。现在查询速度越来越慢,composit索引和其他索引之间是否有显著差异?我尝试了@Ean发布的内容。但是它的速度仍然慢于20个值。复合索引(在查询中使用所有列)几乎总是比几个单列索引好。谢谢,我也将尝试使用它。要创建复合索引,我可以从该表中删除已添加的索引。或者自动删除查询中使用的列?您可能需要尝试一个索引,如(end\u ip,start\u ip,)好的,您可能需要在索引的末尾包含这些索引。我还建议从开始ip开始,比如:
在myproject.map上创建索引映射ix1(结束ip、开始ip描述、lat、lng、县id)
。在start_ip上使用单列索引应该会有更好的性能
Field,Type,Null,Key,Default,Extra
start_ip,"int(10) unsigned",YES,MUL,NULL,
end_ip,"int(10) unsigned",YES,MUL,NULL,
country_id,int(11),NO,,NULL,
lat,double,YES,,NULL,
lng,double,YES,,NULL,
id,int(11),NO,PRI,NULL,auto_increment
CREATE INDEX id_index ON myproject.MAP (start_ip);
CREATE INDEX map_ix1 ON myproject.MAP (end_ip, start_ip);
CREATE INDEX map_ix1 ON myproject.MAP (end_ip, start_ip, ...);