Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
Mysql 我需要按列排序的索引吗?_Mysql_Sql_Indexing - Fatal编程技术网

Mysql 我需要按列排序的索引吗?

Mysql 我需要按列排序的索引吗?,mysql,sql,indexing,Mysql,Sql,Indexing,我们有这样一个查询: select * from foo where some_fk_id = <value> and modified_date > 'date1' and modified_date < 'date2' order by modified_date desc; 选择* 来自富 其中某些\u fk\u id= 并修改了_date>“date1” 和修改日期

我们有这样一个查询:

select *
  from foo
 where some_fk_id = <value>
   and modified_date > 'date1'
   and modified_date < 'date2'
 order by modified_date desc;
选择*
来自富
其中某些\u fk\u id=
并修改了_date>“date1”
和修改日期<'date2'
按修改日期说明订购;

在上述场景中,我是否需要为
某些\u fk\u id
修改的\u date
创建一个复合索引?

不适用于ORDER BY-选择行后应用于结果集。如果您定期选择基于修改的日期,您可能需要考虑一个。


顺便说一句,您提供的语句在修改日期选择两个不同的值。这应该是一个'>'和一个',这取决于您的数据,但是基于修改日期的索引可能对where和orderby都有好处

如果外键条件只给您几行,那么以任何方式按日期对行进行排序都是很便宜的。

您不需要复合索引,但如果您这样做,则可以单独使用索引(即非常快)满足
某些fk\u id
修改的\u日期
where子句

最好的做法是查看查询计划并进行概要分析

您可以使用
EXPLAIN
查看查询计划:

EXPLAIN SELECT * FROM foo WHERE some_fk_id=1 AND modified_date > 'date1' AND modified_date < 'date2' ORDER BY modified_date DESC;
EXPLAIN SELECT*FROM foo,其中某些\u fk\u id=1和修改的\u date>“date1”和修改的\u date<“date2”按修改的\u date DESC排序;
在有或没有综合指数的情况下都可以尝试一下,看看它会有什么样的计划。可能发生的最糟糕的事情是
文件排序
——如果你需要加快速度,尽量避免这些


最重要的是,对实际使用的查询、数据和硬件进行运行时测试。在您的特定情况下,复合索引占用的空间可能会使您的速度减慢,而不仅仅是搜索条目。例如,如果某个_fk_id在表中具有很高的选择性,则可能不需要第二级索引。

它正在执行文件排序,如何避免上述命令出现这种情况?我将尝试使用索引并更新您。select中的*将减少拥有索引的值,因为您的查询仍需要执行键查找以获取其余值。但如果有索引的话,速度应该会更快。最好显式列出要返回的列,并在创建索引时在INCLUDE子句中列出它们。