索引限制使用表的规则-MySQL

索引限制使用表的规则-MySQL,mysql,indexing,Mysql,Indexing,我有一个包含8列的表,其中包含混合数据类型(int、text、varchar等) 此表只有一个对其进行操作的查询(SELECT),在该查询中,它使用4个“and”语句来过滤结果 我的问题是:在这种情况下,索引的一些准则是什么 在我的例子中,读取时间比写入时间具有更高的优先级,所以我应该索引AND子句中出现的所有列吗?我应该只为整数编制索引吗?对于一个查询,使用所有受影响的列编制索引 MySQL的索引从左到右工作,这意味着如果您有一个包含列的表: A varchar(255) B varchar(

我有一个包含8列的表,其中包含混合数据类型(int、text、varchar等)

此表只有一个对其进行操作的查询(SELECT),在该查询中,它使用4个“and”语句来过滤结果

我的问题是:在这种情况下,索引的一些准则是什么


在我的例子中,读取时间比写入时间具有更高的优先级,所以我应该索引AND子句中出现的所有列吗?我应该只为整数编制索引吗?

对于一个查询,使用所有受影响的列编制索引

MySQL的索引从左到右工作,这意味着如果您有一个包含列的表:

A varchar(255)
B varchar(50)
C int(11)
D datetime
键索引(A,B,C,D)
上的索引意味着MySQL将从左到右查找查询中的列。如果您在查询中包含所有这些条件,它将全部使用它们,但如果您只包含
A
B
,它将使用这些条件筛选结果,然后将其余条件应用于剩余的结果集(假设您使用的是


但是,如果只包含
C
D
,它将根本不使用此索引,因为它不知道在
A
中查找什么,对于一个查询,请使用受影响的所有列创建索引

MySQL的索引从左到右工作,这意味着如果您有一个包含列的表:

A varchar(255)
B varchar(50)
C int(11)
D datetime
键索引(A,B,C,D)
上的索引意味着MySQL将从左到右查找查询中的列。如果您在查询中包含所有这些条件,它将全部使用它们,但如果您只包含
A
B
,它将使用这些条件筛选结果,然后将其余条件应用于剩余的结果集(假设您使用的是


但是,如果您只包含
C
D
,它将根本不使用此索引,因为它不知道在
A
中查找什么我认为您应该为select语句所需的每一列创建索引。注意,mysql对字段的长度有限制,您可以在其上创建索引。创建的索引对于MyISAM不能超过1000字节,对于InnoDb(thx OMG Ponies)不能超过767字节。如果您没有写操作,它将显著提高select语句的性能。

我认为您应该为select语句所需的每一列创建索引。注意,mysql对字段的长度有限制,您可以在其上创建索引。创建的索引对于MyISAM不能超过1000字节,对于InnoDb(thx OMG Ponies)不能超过767字节。如果你没有文字,它将显著提高select语句的性能。

如果快速查看,您应该能够计算出最佳的索引列。

如果快速查看,您应该能够计算出最佳的索引列。

创建索引的空间有限,但这取决于引擎-MyISAM为1000,InnoDB是767…创建索引的空间有限,但这取决于引擎-MyISAM是1000,InnoDB是767。。。