Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
优化简单SQL查询?_Sql_Mysql_Query Optimization - Fatal编程技术网

优化简单SQL查询?

优化简单SQL查询?,sql,mysql,query-optimization,Sql,Mysql,Query Optimization,朋友们,您好 在我的MySQL数据库中,我有一个“MAB”表,其中包含关于基因ID(GI_ID)的信息,以及一些其他与基因相关的信息 “MAB_-CAN”表可以包含仅与癌症相关的基因ID(GI_-ID) 我使用以下SQL查询从MAB表中获取癌症相关信息: SELECT * FROM MAB WHERE `GI_ID` IN (SELECT `GI ID` FROM `MAB_CAN`) 这个查询大约需要14秒,太长了。(1605条记录) 但是下面的独立查询需要很短的时间 从MAB\u CAN中

朋友们,您好

在我的MySQL数据库中,我有一个“MAB”表,其中包含关于基因ID(GI_ID)的信息,以及一些其他与基因相关的信息

“MAB_-CAN”表可以包含仅与癌症相关的基因ID(GI_-ID)

我使用以下SQL查询从MAB表中获取癌症相关信息:

SELECT * FROM MAB WHERE `GI_ID` IN (SELECT `GI ID` FROM `MAB_CAN`)
这个查询大约需要14秒,太长了。(1605条记录)

但是下面的独立查询需要很短的时间

MAB\u CAN
中选择
GI\u ID
,其中1

  • 0.0005秒(1605条记录)
MAB
中选择*其中1

  • 0.0007秒(31043条记录)
有优化我的第一个查询的提示吗?

试试这个

SELECT * FROM MAB
   INNER JOIN MAB_CAN ON MAB.GI_ID = MAB_CAN.GI_ID
然后,您需要查看需要返回的列您不应该真正使用SELECT*而应该返回所需列名的不同列表,例如SELECT Col1、Col2、Col3 FROM。。。这样可以最小化返回的数据

正如其他答案所指出的,如果查询仍然很慢,那么您需要在MAB表中的GI_ID字段上放置一个索引

试试这个

SELECT * FROM MAB
   INNER JOIN MAB_CAN ON MAB.GI_ID = MAB_CAN.GI_ID
然后,您需要查看需要返回的列您不应该真正使用SELECT*而应该返回所需列名的不同列表,例如SELECT Col1、Col2、Col3 FROM。。。这样可以最小化返回的数据


正如其他答案所指出的,如果查询仍然很慢,那么您需要在MAB表中的GI_ID字段上放置一个索引

您可以从在MAB表中的GI_ID列上创建索引开始

您可以从在MAB表中的GI_ID列上创建索引开始

  • 将*替换为列名
  • 在GI_ID上创建非聚集索引
  • 将*替换为列名
  • 在GI_ID上创建非聚集索引

  • 使用EXPLAIN查看数据库如何执行查询。现在您可以优化查询和索引。请使用EXPLAIN查看数据库如何执行查询。现在您可以优化查询和索引了。