优化简单SQL查询?
朋友们,您好 在我的MySQL数据库中,我有一个“MAB”表,其中包含关于基因ID(GI_ID)的信息,以及一些其他与基因相关的信息 “MAB_-CAN”表可以包含仅与癌症相关的基因ID(GI_-ID) 我使用以下SQL查询从MAB表中获取癌症相关信息:优化简单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中
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列上创建索引开始
使用EXPLAIN查看数据库如何执行查询。现在您可以优化查询和索引。请使用EXPLAIN查看数据库如何执行查询。现在您可以优化查询和索引了。