Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 SQL使用两列索引或两个单索引(x=?和y>;?)_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql SQL使用两列索引或两个单索引(x=?和y>;?)

Mysql SQL使用两列索引或两个单索引(x=?和y>;?),mysql,sql,sql-server,Mysql,Sql,Sql Server,这个问题可能看起来与之前发布的问题非常相似,但略有不同。 当您的查询始终包含两列时,我知道为这两列创建索引是一种好的做法,但在这种情况下,查询将类似于检查一列,然后从第二列中查找大于给定值的所有记录,例如 SELECT * FROM Data WHERE User_Id = 'Johndoe' AND Last_Query > 1001 因此,我应该仍然为两列使用单个索引(User\u id,Last\u Query,在上面的示例中),还是应该为每一列创建不同的索引?多列索引的设计正是

这个问题可能看起来与之前发布的问题非常相似,但略有不同。 当您的查询始终包含两列时,我知道为这两列创建索引是一种好的做法,但在这种情况下,查询将类似于检查一列,然后从第二列中查找大于给定值的所有记录,例如

SELECT * FROM Data WHERE User_Id = 'Johndoe' AND Last_Query > 1001 

因此,我应该仍然为两列使用单个索引(
User\u id
Last\u Query
,在上面的示例中),还是应该为每一列创建不同的索引?

多列索引的设计正是为了处理这种情况。当索引中的第一列具有已知的值时(在您的示例中,User_Id='Johndoe',具有该值的所有行都由索引中的第二列(在您的示例中的最后一个_查询)排序。这允许有效地查找第二列上范围的起始位置


通常,当索引列的任何前缀上都有“=”筛选器,后跟一个范围筛选器时,这种方法就有效了(>或者有时你根本不应该使用索引。这在很大程度上取决于表的大小和数据的类型。如果在这张表上使用索引,这将是一个包含多对多关系的大表,因此对于每个用户,在给定点上都需要看到为他发布的任何新问题@vol7ronOne index for user_Id就足够了,因为您正在应用“用户Id”(已使用索引)和上次查询>1001(未使用索引)的位置,您是否会按任一字段单独搜索?该查询是否需要执行?MySQL或MS SQL Server?不要标记未涉及的产品,尤其是当涉及到产品行为可能不同的领域时。
WHERE col1=a AND col2=b ... AND colN=c AND colN+1 > d