首页 > 其他 > 详细

创建索引的基本规则

时间:2016-04-19 22:49:02      阅读:262      评论:0      收藏:0      [点我收藏+]

在创建索引的时候有一个三星索引,这是我看《数据库索引设计与优化》这本书上看到的,姑且在此卖弄一下:

SELECT ARTICLE_ID,SUMMARY_NUM,REVIEW_NUM,FORWARD_NUM,COLLECTION_NUM FROM article_num_summary WHERE ARTICLE_ID = ‘10000‘ AND REVIEW_NUM=0 ORDER BY SUMMARY_NUM;

一星的定义:WHERE 条件等值作为组合索引最开头的列。一星的索引(ARTICLE_ID,REVIEW_NUM)或(REVIEW_NUM,ARTICLE_ID);

二星定义:将ORDER BY  列加入索引,这样的话,数据会在索引中排序好,避免数据库在访问表的时候再进行排序。二星索引 (ARTICLE_ID,REVIEW_NUM,SUMMARY_NUM)或(REVIEW_NUM,ARTICLE_ID,SUMMARY_NUM);

三星定义:将查询语句中剩余的列加入到索引中,这样只查询索引,不会访问表。三星索引:(ARTICLE_ID,REVIEW_NUM,SUMMARY_NUM,FORWARD_NUM,COLLECTION_NUM)或(REVIEW_NUM,ARTICLE_ID,SUMMARY_NUM,FORWARD_NUM,COLLECTION_NUM);

在此只讨论等值条件(等值条件下都可以称为匹配列),范围条件(>,<,between 等)不包括在此;

如果在查询语句中有范围条件。

例:SELECT ARTICLE_ID,SUMMARY_NUM,REVIEW_NUM,FORWARD_NUM,COLLECTION_NUM FROM article_num_summary WHERE ARTICLE_ID = ‘10000‘ AND FORWARD_NUM > 5 AND REVIEW_NUM=0 ORDER BY SUMMARY_NUM;假设我们的索引为:(ARTICLE_ID,FORWARD_NUM,REVIEW_NUM),实际上因为FORWARD_NUM条件为范围,实际起作用的索引为(ARTICLE_ID,FORWARD_NUM)也就是说REVIEW_NUM将不会作为我们所设定的索引来起作用,因为在数据库优化器中,范围条件为该组合索引的最后一个匹配列,后边的列都为非匹配列。

创建索引的基本规则

原文:http://www.cnblogs.com/transcend/p/5410449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!