`
youyu4
  • 浏览: 440223 次
社区版块
存档分类
最新评论

索引细节

 
阅读更多

索引细节

 

什么是索引

索引就是加快检索表中数据的方法,就是为了不想扫描整个表。

 

 

索引的优点

 

1. 大大加快查找数据的速度

2. 建立唯一索引,保证数据表中每一行数据唯一性

3. 进行分组和排序检索时,可以明显地减少时间

 

 

索引的缺点

 

1. 降低增删改的速度

2. 创建和维护索引,需要消耗我们的维护时间

3. 索引还是需要占用到一定的物理空间的

 

 

索引的分类

 

按索引方法分

 

  • B-Tree索引
  • Hash索引

按索引类型分

 

1. 普通索引

普通创建:

CREATE INDEX indexName ON mytable(username(length));

修改表创建:

ALTER mytable ADD INDEX [indexName] ON (username(length)) 

创建表时创建

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   INDEX [indexName] (username(length))   ); 

 

 

2. 唯一索引

保证唯一性,但允许有空值

CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

 

 

3. 主键索引

保证唯一性,不允许有空值,作为主键,有时我们还会加上自增

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );

 

 

4. 全文索引

用于全文搜索,索引类型选择Full Text

 

 

5. 组合索引

为了进一步榨取MySQL的效率,就要考虑建立组合索引

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

 

建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:

usernname,city,age   usernname,city   usernname  为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,

 

 

索引的另一种分类

 

 1. 直接创建索引和间接创建索引

直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)

间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引

 

 

2. 普通索引和唯一索引

普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)

唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用

CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

 

 

3. 单个索引和组合索引

单个索引:即非复合索引

复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段

CREATE INDEX name_index ON username(firstname,lastname)

 

 

4. 聚簇索引和非聚簇索引(聚集索引,群集索引)

聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW(允许有重复记录的聚簇索引)

非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

 

 

什么时候用索引

 

1. where 或 join 用到的字段加索引

注意MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引(like的时候关键字前面不能用%)

索引有效:

SELECT * FROM mytable WHERE username like'admin%'

索引无效:

SELECT * FROM mytable WHEREt Name like'%admin'

 

 

2. 不建议加索引的情况

1)重复且分布平均的字段,像sex这样的字段,只有男和女,就不需要加索引

2)数据太少,如果只有几行数据,就不要索引了

3)经常插入修改数据的,也不建议加索引

 

 

 

3. 当字段数据更新频率较低,查询使用频率较高并且存在大量重复值是建议使用聚簇索引

 

4. 经常同时存取多列,且每列都含有重复值可考虑建立组合索引

 

 

参考:

http://www.jb51.net/article/49346.htm

http://blog.sina.com.cn/s/blog_6a6eb42d0100kmyz.html

http://blog.csdn.net/xyh94233/article/details/6935669

 

分享到:
评论

相关推荐

    sqlserver 2008 查找缺失索引

    3. **`sys.dm_db_missing_index_details`** 视图则提供了具体的缺失索引细节,比如涉及的表、字段等。 #### 关键字段说明 1. **`object_id`**:表示表在数据库中的唯一标识。 2. **`equality_columns`**:用于索引...

    Lucene索引管理器(基于Luke修改而来)

    这个索引管理器可能提供查看倒排索引细节的功能,如词频、文档频率和位置信息。 5. **性能优化**: 基于Luke的修改可能包含性能分析工具,帮助开发者识别瓶颈,如内存使用、磁盘I/O或查询速度,并提供优化建议。...

    MySQL Innodb 索引原理详解

    索引原理与存储细节 在MySQL的InnoDB存储引擎中,索引通常是以B+树的形式实现的。InnoDB支持多种索引类型,包括主键索引、唯一索引、普通索引等。其中,主键索引是最常见的索引类型。 ##### 2.1 主键索引 主键...

    传奇地图索引修改.zip

    总的来说,《传奇地图索引修改》工具能够帮助开发者更好地控制游戏地图的每一个细节,从而提升游戏的整体质量和玩家体验。对于那些希望在《传奇》世界中留下自己独特烙印的游戏爱好者,这无疑是一份不可多得的宝藏。...

    Mysql-索引原理分析

    MySQL数据库中的索引是提升查询性能的关键工具,它的工作原理和设计细节对于数据库管理员和开发者来说至关重要。让我们深入探讨一下标题和描述中提及的几个关键概念。 首先,我们来看看索引的存储结构。在MySQL中,...

    XML数据索引技术

    这种索引能够快速过滤掉不匹配的文档集合,但可能会忽略一些细节信息,影响查询精度。 2. **结构相似性**:通过计算不同文档之间的结构相似度来构建索引,适用于需要进行结构相似性比较的场景。这种方法可以提供更...

    c++实现倒排索引算法

    倒排索引是一种高效的数据结构,常用于全文搜索引擎和数据库系统中,...倒排索引算法的实现涉及到许多细节,包括分词策略、数据结构的选择、空间效率和时间效率的平衡等,这些都是在实践中需要不断调整和优化的地方。

    Quick Tour of ClickHouse Internals.pdf

    ### 索引细节 - **稀疏索引**:ClickHouse的索引是稀疏的,能够适应内存大小,并且通常默认的粒度(8192)已经足够使用。 - **索引不创建唯一约束**:该索引不保证数据的唯一性。 - **点查询性能差**:索引对点查询...

    数据结构课程设计 索引顺序查找

    这些文档将帮助你深入理解索引顺序查找的原理和实现细节,同时提供了一个良好的参考模板,对于完成类似的课程设计或项目具有很高的价值。 总的来说,通过这个课程设计,你不仅可以掌握C++编程技能,还能深入理解...

    SuperMap Objects .NET 创建字段索引

    这个例子对于开发者来说是一个宝贵的资源,因为它提供了具体的实现细节和上下文。 通过理解字段索引的工作原理,并熟练掌握创建和删除的技巧,开发者可以更好地优化GIS应用,提升用户体验,特别是在处理大量数据时...

    MS Sql 2005 全文索引

    为了更好地理解全文索引的工作原理和技术细节,下面将详细介绍全文索引中常用的一些关键术语: 1. **全文索引**:指在特定的列中存储有关重要词汇及其位置信息的一种特殊索引类型。通过这些信息可以快速执行全文...

    nachos二级索引文件系统结题报告及源代码

    这通常包括对原有文件系统结构的理解,二级索引的实现细节,性能比较(例如,与原有一级索引相比,查找速度有何提升),以及可能的优化策略。此外,报告还应该包含实验结果的分析,证明新实现的正确性和有效性。 ...

    为什么oracle有时不用索引来查找数据

    本文将深入探讨Oracle在哪些情况下可能会选择不使用索引的原因,并解释背后的逻辑和技术细节。 #### Oracle查询优化器与执行计划 当用户提交一个SQL查询给Oracle数据库时,Oracle会根据内部优化器生成一个执行计划...

    Laravel开发-elasticquent

    Elasticquent是Laravel开发者的一个强大工具,它简化了Elasticsearch在Laravel应用中的集成,使得开发人员可以专注于业务逻辑,而不是底层的搜索和索引细节。通过Elasticquent,我们可以充分利用Elasticsearch的强大...

    自定义中文索引Listview

    通过查看源代码,我们可以学习到具体的实现细节,如如何处理中文转拼音、如何建立首字母映射、如何实现索引栏的点击跳转以及如何动态更新索引栏状态。这是一个很好的学习和参考的实例,有助于开发者更好地理解和掌握...

    空间索引总体介绍

    - **树索引**:结构上与R树相同,但在算法细节上有所改进,提高了索引的效率和灵活性。 综上所述,空间索引技术对于现代GIS系统来说至关重要。通过合理选择和设计索引结构,可以极大地提高空间数据处理和分析的...

    SBT二叉树文件索引

    通过解析`SbtIndex.cpp`和`SbtNode.cpp`源代码,我们可以深入了解这种索引机制的具体实现细节,从而优化和扩展我们的文件管理系统。同时,`SbtIndex.h`和`SbtNode.h`头文件提供了接口定义,方便我们在其他程序中使用...

    linux 连接与索引节点

    内核索引节点是系统在运行时对文件进行操作的基础,它保留了更通用的文件信息,同时忽略了与特定文件系统类型相关的细节。 #### 链接:硬链接与软链接 链接是Linux中一种非常重要的文件管理技术,它允许用户以不同...

    solr单机-tools.zip

    - **Luke**:一个可以查看Solr索引细节的工具,包括字段信息、分词等。 "solr单机-tools.zip"可能还包括一些自定义配置示例、教程文档或特定场景的解决方案。学习和掌握Solr单机部署及其工具,将有助于你更好地理解...

    pcl根据索引来提取点云

    通过运行和分析这些代码,可以更深入地理解PCL库中索引操作的实现细节。 总结来说,PCL库的索引功能是点云处理中的重要工具,它允许我们高效地对大规模点云进行有针对性的处理。理解和掌握这一技术对于处理复杂的3D...

Global site tag (gtag.js) - Google Analytics