创建索引的基本规则

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

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将不会作为我们所设定的索引来起作用,因为在数据库优化器中,范围条件为该组合索引的最后一个匹配列,后边的列都为非匹配列。

时间: 2024-10-21 13:59:58

创建索引的基本规则的相关文章

Oracle 创建索引的基本规则总结

Oracle 创建索引的基本规则总结 一.B-Tree索引 1.  选择索引字段的原则: 在WHERE子句中最频繁使用的字段 联接语句中的联接字段 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好) Oracle在UNIQUE和主键字段上自动建立索引 在选择性很差的字段上建索引只有在这个字段的值分布非常倾斜的情况下才有益(在这种情况下,某一,两个字段值比其它字段值少出现很多) 不要在很少独特值的字段上建B-TREE索引,在这种情况下,你可以考虑在这些字段上建位图索引.在

Elasticsearch搜索API使用一:创建索引并指定索引类型的mapping

ES默认是动态创建索引和索引类型的mapping的.这就相当于无需定义Solr中的Schema,无需指定各个字段的索引规则就可以索引文件,很方便.但有时方便就代表着不灵活.比如,ES默认一个字段是要做分词的,但我们有时要搜索匹配整个字段却不行.如有统计工作要记录每个城市出现的次数.对于NAME字段,若记录"new york"文本,ES可能会把它拆分成"new"和"york"这两个词,分别计算这个两个单词的次数,而不是我们期望的"new

Elasticsearch创建索引和映射结构详解

前言 这篇文章详细介绍了如何创建索引和某个类型的映射. 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200). 1       创建索引 1.1     简单创建语句 curl -XPUT [address]/blog 1.2     带参数的创建语句 curl -XPUT [address]/blog/ -d '{ "settings":{ "number_of_shards":1,     //设置分

无法对视图创建索引,因为该视图未绑定到架构

遇到这个问题,查了一位博主的文章,但是说的不是很详细,在这里说明白一些. 修改此问题 需要在 创建视图语句中加上 with SCHEMABINDING --创建索引视图 create view 视图名 with schemabinding as select 语句 go --创建索引视图需要注意的几点 --创建索引视图 create view 视图名 with schemabinding as select 语句 go ---创建索引视图需要注意的几点 1. 创建索引视图的时候需要指定表所属的架

sql 高级 (五)(create index(创建索引) drop)

SQL create index 语句 create  index语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 用户无法看到索引,它们只能被用来加速搜索/查询. 更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新. 理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引. 允许使用重复的值: create index  index_name ON table_name (column_name) SQL create

hive创建索引

索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 hive> create index user_index on table user(id) > as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' > with deferred rebuild > IN TABLE user_index_table; hive> alter ind

索引分类、创建索引、删除索引

1.普通索引没有索引类型: 2.唯一性索引: 索引起别名: 3.多列索引: 在已有表上创建索引: 表4 CREATE INDEX index_userName ON t_user4(userName); 创建唯一性索引:(有别名) CREATE UNIQUE INDEX index_password ON t_user4(PASSWORD); 多列索引: 4.用ALTER TABLE创建索引: 唯一性索引: 多列索引: 删除索引: DROP INDEX index_password ON t_u

MongoDB创建索引

1,查询索引 2,创建索引 来自为知笔记(Wiz)

(转)SQL Server创建索引

什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音.笔画.偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词).同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度.? SQL Server中的数据也是按页( 4KB )存放? 索引:是SQL Server编排数据的内部方法.它为