Php select查询where子句顺序的更改是否会提高性能?

Php select查询where子句顺序的更改是否会提高性能?,php,mysql,performance,Php,Mysql,Performance,如果where子句标准的顺序发生变化,是否有性能优势 我的意思是 我有一个选择查询 SELECT * from mytable WHERE enabled = '1' AND type = 'pictures' AND category = 'family' 现在在上面的查询中 先启用,在我的表中有95%的行处于启用状态 类型排在第二位,其中我的表包含75%的 打印图片 类别排在最后,其中我的表包含20%的行 属于家庭范畴 所以我的问题是 如果我像这样订购where条款,我会看到任何性能优势

如果where子句标准的顺序发生变化,是否有性能优势

我的意思是

我有一个选择查询

SELECT * from mytable WHERE enabled = '1' AND type = 'pictures' AND category = 'family' 
现在在上面的查询中

  • 先启用,在我的表中有95%的行处于启用状态
  • 类型排在第二位,其中我的表包含75%的 打印图片
  • 类别排在最后,其中我的表包含20%的行 属于家庭范畴
  • 所以我的问题是 如果我像这样订购where条款,我会看到任何性能优势吗

    SELECT * from mytable WHERE category = 'family' AND type = 'pictures' AND enabled = '1'
    
    谢谢 使用:MYISAM作为表引擎。
    where子句中的所有列都有索引。

    不,优化器非常聪明,可以在这个简单的
    SELECT
    中使用最好的索引。。对每一个都使用
    解释
    ,仔细检查你是否愿意(它们应该是一样的)


    但是,如果在所有三列上都添加一个索引,您可能会获得更好的性能。

    您的三列上都有一个索引吗?或者您已经创建了3个索引(每列一个)?3个索引、每列1个作为3列是可选的,具体取决于查询。与某些查询一样,可能只包含类型,而某些查询可能只包含启用的。您是指保留已创建索引的附加索引,还是仅包含3列的索引?我同意,但这取决于MySQL版本,新版本可以处理多个索引。如果使用一个索引,请小心,因为顺序很重要。@AMB如果需要单独的索引,请保留它们,但可以尝试在所有3列上创建一个索引,用于需要全部3列(或更多)的查询。但这会减慢插入、删除和更新查询的速度。您总是可以通过EXPLAIN检查SELECT中使用了哪个索引。@AMB实际上,数据是按照列的顺序连接在一个复合索引中的,因此索引(a,b,c)可以由
    使用,其中a=x
    其中a=x和b=y和c=z
    而不是
    其中b=y和c=z
    其中a=z和c=z
    @是的,索引有点像一门黑暗的艺术。。让优化器使用正确的优化器也是很棘手的!但是,如果你做对了,你可以获得一些惊人的性能优势!