如何正确使用MySQL索引?

如何正确使用MySQL索引?,mysql,Mysql,我在一个相当大的MySQL数据库中使用php和MySQL,我第一次尝试使用idexes。我得到的概念是,服务器将首先查看索引,但我在让服务器使用索引方面遇到了麻烦。因此,我的问题是: 在表中使用主键(因此是主索引)是否会覆盖我试图从另一列使用的索引?我必须在select查询中显式指定索引吗?(顺便说一句,我正在使用几个表联接) 有谁知道使用MySQL索引的入门指南吗?我还没有找到一个好的 mysql索引的一个重要规则,假设您有以下索引: KEY(A,B,C) 然后在代码中有一个where子句或

我在一个相当大的MySQL数据库中使用php和MySQL,我第一次尝试使用idexes。我得到的概念是,服务器将首先查看索引,但我在让服务器使用索引方面遇到了麻烦。因此,我的问题是:

在表中使用主键(因此是主索引)是否会覆盖我试图从另一列使用的索引?我必须在select查询中显式指定索引吗?(顺便说一句,我正在使用几个表联接)


有谁知道使用MySQL索引的入门指南吗?我还没有找到一个好的

mysql索引的一个重要规则,假设您有以下索引:

KEY(A,B,C)
然后在代码中有一个where子句或join,例如:

WHERE B = 'mydata' AND C = 'moredata'
Mysql将无法使用索引进行查询,因为索引按照给定的顺序工作,并且A列未包含在内。 修复方法是在查询中使用索引,或重新排序索引(或添加第二个索引),如下所示:

或者(如果您在WHERE/JOIN中根本不需要A):


此外,还可以查看哪些内容可以帮助您找到索引未被使用的原因。

您为where子句中将更频繁使用的列编制了索引,mysql optimizer将完成其余工作。O'Reilly的一本书《高性能mysql》非常好。还有这个博客:你的索引应该与你在连接中使用的列最匹配。mysql的一个重要规则是,索引字段只能按顺序使用,即如果您的索引是a、b、c,并且您在c或b上没有a或c没有a和b,那么mysql就不能使用该索引。@Giles您能否澄清该评论(可能作为答案?),因为我花了几次阅读才理解i.e部分。。。干杯,谢谢!一个问题,那么按键(A,B,C)是指使用列A,B和C的索引吗?或者你是说A、B和C列上分别有三个单独的索引?另外,添加主键是否会自动添加索引?意思是,如果它对我没有用处,我应该删除它吗?很抱歉回答太慢,我不在。是的,我指的是一个有三列的键。键和索引是同义词,因此键是索引(主键是唯一索引)。唯一索引定义了表上的约束,因此最好将其保留在原位。其他索引—如果您知道自己,并且没有其他人在查询中使用该索引,则删除该索引将节省存储空间。
KEY(C,B,A)
KEY(C,B)