多个条件的查询建立索引是几个字段建立一个索引还是还每个字段定义为一个索引?

fjytzh 2009-04-10 04:19:25
列表中经常涉及到的一些筛选字段例如:
类型(int),
区域(int),
价格(float)(经常做区间比较),
面积(float)(经常做区间比较)
标题、描述 等 (like 匹配)

还有一些排序字段 例如:
发布时间 (int)
更新时间 (int)
排序(int)

这些字段中
类型+区域+价格+面积 经常是一起查询的,但是也有某项不参与的情况

是不是要把这四个字段联合起来做成一个索引呢?还是每个字段做一个索引呢?

顺便问下是不是也要在排序字段上建立索引呢?
...全文
1436 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoenix_pj 2009-04-10
  • 打赏
  • 举报
回复
排序字段上也是应该建立索引的,经常查询的列加索引,经常update,delete,insert的列,尽量不要使用索引
不过我建议每张表的索引数不要超过3个
phoenix_pj 2009-04-10
  • 打赏
  • 举报
回复 2
 三、单列索引与多列索引

  索引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表:

ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);

  由于索引文件以B-树格式保存,MySQL能够立即转到合适的firstname,然后再转到合适的lastname,最后转到合适的age。在没有扫描数据文件任何一个记录的情况下,MySQL就正确地找出了搜索的目标记录!

  那么,如果在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、 age的多列索引一样呢?答案是否定的,两者完全不同。当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。

  四、最左前缀

  多列索引还有另外一个优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:

* firstname,lastname,age
* firstname,lastname
* firstname

  从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧