首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL索引结构:多索引还是单索引?

MySQL索引结构:多索引还是单索引?
EN

Stack Overflow用户
提问于 2010-06-04 22:20:45
回答 2查看 547关注 0票数 1

我有关于数据库优化和索引的问题。我有一个名为"projects“的表,我将执行如下查询:

排序查询

从active =1 ORDER BY created的项目中选择*

从active =1 project_deadtime顺序的项目中选择*

从active =1 project_allowedtime顺序的项目中选择*

我的桌子结构像这样的

id int(11)无PRI空auto_increment employer_id int(11)无MUL NULL

project_title varchar(100)无MUL NULL

project_description文本无空

project_budget int(11) NULL

project_allowedtime int(11) NULL

project_deadtime日期不为空

创建日期时间无MUL NULL

活动tinyint(1)无MUL NULL

应该创建哪些列以及如何创建索引(单列索引还是多列索引)。例如,我是否应该使用active-created & active-project_deadtime & active-project_allowedtime,多个索引或单个活动索引就足够了?谢谢

编辑: projects表将有最多1000-2000行。选择查询性能非常重要,大约90%的项目处于活动状态。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-04 22:26:54

最常使用的查询是什么?会有多少行?哪些查询需要最快?您是运行更多的SELECTs还是运行更多的INSERTs?在优化数据库的性能时,有很多考虑因素。

仅根据您发布的内容,您只使用以下列:

  1. active
  2. created
  3. project_deadtime
  4. project_allowedtime

仅仅以active为基础的指数不会有什么好处--它很可能会将结果缩小到大约一半。

其他列是每个潜在的索引。如果您不像SELECT的性能那样关心SELECT的性能,那么我可以说,索引这三个方面,优先考虑的列可能缩小查询范围,使查询范围缩小到最少的行:

active)

  • (project_deadtime,active)

  • (project_allowedtime,active
  1. (创建)

这将允许MySQL在只使用第一列(例如,如果只需要created )的情况下使用索引,如果使用这两列,则允许使用(以便进一步缩小结果范围)。

票数 3
EN

Stack Overflow用户

发布于 2010-06-04 22:23:55

您需要考虑活动索引的选择性。

如果您的项目中有很小一部分在任何时候都处于活动状态,则

( active )

  • 如果在任何时候只有相对较少的项目是活动的,但是表非常大:

( active,created) (active,project_deadtime) (active,project_deadtime)(active,active)--很大一部分项目可以同时处于活动状态:

(创建)( (project_allowedtime) ) (project_deadtime)

Update:根据您提供的新信息,我将选择最后一个选项。尽管有了这么小的表,即使没有索引,排序也应该是即时的。另一种选择是将第三个选项修改为覆盖指数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2978169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档