我有关于数据库优化和索引的问题。我有一个名为"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%的项目处于活动状态。
发布于 2010-06-04 22:26:54
最常使用的查询是什么?会有多少行?哪些查询需要最快?您是运行更多的SELECTs还是运行更多的INSERTs?在优化数据库的性能时,有很多考虑因素。
仅根据您发布的内容,您只使用以下列:
仅仅以active为基础的指数不会有什么好处--它很可能会将结果缩小到大约一半。
其他列是每个潜在的索引。如果您不像SELECT的性能那样关心SELECT的性能,那么我可以说,索引这三个方面,优先考虑的列可能缩小查询范围,使查询范围缩小到最少的行:
active)
这将允许MySQL在只使用第一列(例如,如果只需要created )的情况下使用索引,如果使用这两列,则允许使用(以便进一步缩小结果范围)。
发布于 2010-06-04 22:23:55
您需要考虑活动索引的选择性。
如果您的项目中有很小一部分在任何时候都处于活动状态,则
( active )
( active,created) (active,project_deadtime) (active,project_deadtime)(active,active)--很大一部分项目可以同时处于活动状态:
(创建)( (project_allowedtime) ) (project_deadtime)
Update:根据您提供的新信息,我将选择最后一个选项。尽管有了这么小的表,即使没有索引,排序也应该是即时的。另一种选择是将第三个选项修改为覆盖指数。
https://stackoverflow.com/questions/2978169
复制相似问题