Mysql复合索引与多列单索引

Mysql复合索引与多列单索引,mysql,Mysql,我的表中有9列homes\u infotable 家庭id 位置id(来自位置表的外键)(int) 价格(整数) 楼层(内部) 房间(内部) 租金收入(浮动) 回报(浮动) 报价类型(varchar) 出版日期 在前端,我提供了许多输入字段(过滤器),允许用户在每种可能的组合中对一个或多个列进行选择查询。他们还可以按任何列对结果进行排序 因此,查询可能与下面的查询一样复杂 SELECT*FROM homes\u info LEFT JOIN locations.location\u id=hom

我的表中有9列
homes\u info
table

  • 家庭id
  • 位置id(来自
    位置
    表的外键)(int)
  • 价格(整数)
  • 楼层(内部)
  • 房间(内部)
  • 租金收入(浮动)
  • 回报(浮动)
  • 报价类型(varchar)
  • 出版日期
  • 在前端,我提供了许多输入字段(过滤器),允许用户在每种可能的组合中对一个或多个列进行选择查询。他们还可以按任何列对结果进行排序

    因此,查询可能与下面的查询一样复杂

    SELECT*FROM homes\u info LEFT JOIN locations.location\u id=homes\u info.location\u id WHERE locations.location\u name='herford'&&price<3000&&price>1000&&floors<3&&floors>1&&loors<3&&rooms>1&&mdash租金收入<100&&rent\u收入>150&&payback<900&&payback>100&&offer\u类型='rent'ORDER BY任何用户想要的列

    查询可以像下面这样简单

    SELECT*FROM homes\u info LEFT JOIN location on locations.location\u id=homes\u info.location\u id WHERE floors>1订单由任何用户指定

    用户可以在上述两个极端查询之间进行任何可能的查询

    那么,我应该如何在上述7列上使用索引,我应该为每列指定不同的索引(除了
    home\u id
    location\u id
    )吗

    ALTER TABLE homes\u info添加索引(价格)

    ALTER TABLE homes\u info添加索引(楼层)

    ALTER TABLE homes\u info添加索引(房间)

    ALTER TABLE homes\u info添加索引(发布日期)

    但这将使MySQL为更大的查询合并索引,我不知道这有多糟糕

    为了避免这种情况,我可以使用复合索引

    ALTER TABLE homes\u info添加索引(价格、楼层、房间、租金收入、回报、优惠类型、发布日期)

    ALTER TABLE homes\u info添加索引(楼层、房间、租金收入、回报、优惠类型、发布日期)

    ALTER TABLE homes\u info添加索引(楼层、房间、租金收入、回报、优惠类型、发布日期)

    ALTER TABLE homes\u info添加索引(发布日期)


    那么哪种方法更好呢?在每一列上使用不同的索引或使用复合索引?

    我不能引用权威的来源来说明它“更好”,但单独的索引似乎是显而易见的do@ChrisLear谢谢,我已经在使用单独的索引了,因为这是一个自然的选择,但我认为使用复合索引会加快速度,这就是为什么我想这么做confirm@ChrisLear哦,sry,实际上复合索引并不适用于所有组合,如果我想选择price=“x”和published_date=“xxxxx”`,在这种情况下,没有索引会应用,因为复合索引可以在最左边的前缀列上工作