Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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?(MySQL数据库)_Mysql_Sql_Database - Fatal编程技术网

如何改进此SQL?(MySQL数据库)

如何改进此SQL?(MySQL数据库),mysql,sql,database,Mysql,Sql,Database,数据库是MySQL InnoDB表(切换到MyISAM查看其工作原理)。 该表有大约500000条记录,搜索的字段被编入索引。 我需要很长时间才能得到结果,有时会出现内部服务器错误 如何改进查询?研究查询的执行计划。在MySql中,这是使用explain命令完成的 SELECT * FROM inventory WHERE inventory.zip IN (93650,93750,93765,93729,93710,93740,93711,93720,93704,93741,93705,9

数据库是MySQL InnoDB表(切换到MyISAM查看其工作原理)。 该表有大约500000条记录,搜索的字段被编入索引。 我需要很长时间才能得到结果,有时会出现内部服务器错误


如何改进查询?

研究查询的执行计划。在MySql中,这是使用
explain
命令完成的

SELECT * 
FROM inventory 
WHERE inventory.zip IN (93650,93750,93765,93729,93710,93740,93711,93720,93704,93741,93705,93755,93791,93790,93794,93793,93726,93792) AND 
      inventory.price >= 1000 AND 
      inventory.year BETWEEN 1977 AND 2011 
ORDER BY price ASC LIMIT 0, 25

这将为您提供执行计划。这样,您就可以看到它是否正确地使用了索引,或者您的某个条件是否引发了完整的表扫描。如果需要,您需要另一个索引,或者您可能需要修改查询本身。

研究查询的执行计划。在MySql中,这是使用
explain
命令完成的

SELECT * 
FROM inventory 
WHERE inventory.zip IN (93650,93750,93765,93729,93710,93740,93711,93720,93704,93741,93705,93755,93791,93790,93794,93793,93726,93792) AND 
      inventory.price >= 1000 AND 
      inventory.year BETWEEN 1977 AND 2011 
ORDER BY price ASC LIMIT 0, 25

这将为您提供执行计划。这样,您就可以看到它是否正确地使用了索引,或者您的某个条件是否引发了完整的表扫描。如果需要,您需要另一个索引,或者可能需要修改查询本身。

看起来不错。您可以限制结果并使其非常具体。查看数据库关键区域的索引。也许您可以通过在WHERE子句中使用
price
更改
zip
并在price列上添加索引(将索引和其他两列合并)来改进它。您可以限制结果并使其非常具体。查看数据库关键区域的索引。也许您可以通过在WHERE子句中使用
price
更改
zip
并在price列上添加索引(与其他两列合并索引)来改进它。非常感谢!我不能投票,因为我没有注册。非常感谢!我不能投赞成票,因为我没有注册。