`
还有也许
  • 浏览: 169251 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

索引介绍和各种索引解释以及创建语句

阅读更多

一、各种索引介绍:

1、普通索引

  普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

  2、唯一索引

  普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。

  如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

  3、主索引

  在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。

  4、外键索引

  如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。

  5、复合索引

  索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。

  6、索引的长度

  在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对MySQL来说很复杂,如果需要处理的数据量很大,响应时间就会很长。

  这类场合正是全文索引(full-textindex)可以大显身手的地方。在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加:

  ALTERTABLEtablenameADDFULLTEXT(column1,column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法:

  SELECT*FROMtablename

  WHEREMATCH(column1,column2)AGAINST(‘word1','word2','word3’)

  上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。

  注解:InnoDB数据表不支持全文索引

二、索引的创建语句:

1.添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`) 
3.添加INDEX(普通索引)mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` )

 三、在哪些地方加索引:

1、where条件列

2、排序列或者分组列

3、主键本身就是索引,无需再次添加

 

声明:大部分是网上扒拉的,只备以后用,如果哪位高人觉得写得不对,热情欢迎大家指出。

分享到:
评论
2 楼 jsx112 2011-01-06  
<div class="quote_title">还有也许 写道</div>
<div class="quote_div">
<p>一、各种索引介绍:</p>
<p>1、普通索引</p>
<p>  普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。</p>
<p>  2、唯一索引</p>
<p>  普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。</p>
<p>  如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。</p>
<p>  3、主索引</p>
<p>  在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。</p>
<p>  4、外键索引</p>
<p>  如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。</p>
<p>  5、复合索引</p>
<p>  索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。</p>
<p>  6、索引的长度</p>
<p>  在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对MySQL来说很复杂,如果需要处理的数据量很大,响应时间就会很长。</p>
<p>  这类场合正是全文索引(full-textindex)可以大显身手的地方。在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加:</p>
<p>  ALTERTABLEtablenameADDFULLTEXT(column1,column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法:</p>
<p>  SELECT*FROMtablename</p>
<p>  WHEREMATCH(column1,column2)AGAINST(‘word1','word2','word3’)</p>
<p>  上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。</p>
<p>  注解:InnoDB数据表不支持全文索引</p>
<p>二、索引的创建语句:</p>
<pre name="code" class="sql">1.添加PRIMARY KEY(主键索引)
mysql&gt;ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql&gt;ALTER TABLE `table_name` ADD UNIQUE (`column`)
3.添加INDEX(普通索引)mysql&gt;ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql&gt;ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
mysql&gt;ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3` )</pre>
<p> 三、在哪些地方加索引:</p>
<p>1、where条件列</p>
<p>2、排序列或者分组列</p>
<p>3、主键本身就是索引,无需再次添加</p>
<p> </p>
<p>声明:大部分是网上扒拉的,只备以后用,如果哪位高人觉得写得不对,热情欢迎大家指出。</p>
</div>
<p> </p>
1 楼 qingfengjushi1 2010-10-14  
并不是在where条件的列都适合创建索引, 和表的分布有关系, 有大量更新操作的表也不适合建太多索引, 维护索引也需要消耗很多资源, 楼主再多介绍一些建索引的技巧就更好了

相关推荐

    数据库 创建索引 sql oracle

    本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点 ---------------- 索引是数据库表中一个或多个列的值的数据结构,用于快速定位和检索数据。创建索引可以提高...

    mysql中创建各种索引的语句整理.pdf

    Mysql中创建各种索引的语句整理 代码 添加PRIMARY KEY(主键索引) 添加UNIQUE(唯一索引) 添加INDEX(普通索引) 添加FULLTEXT(全文索引) 添加多列索引 ) mysql&gt;ALTER TABLE `...

    SQLserver索引创建语句.txt

    SQLserver索引创建语句

    MySQL数据库:创建索引.pptx

    使用CREATE INDEX语句可以在一个已有表上创建索引,一个表可以创建多个索引。 语法格式: CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: UNIQUE:表示创建的是唯一性索引 ...

    oracle在线创建索引和重组索引

    下面我们将详细介绍在线创建索引和重组索引的步骤和注意事项。 一、在线创建索引 在线创建索引可以提高查询性能,但是需要评估该索引的必要性和可能对现有语句的影响。如果不是紧急的大索引,最好在维护时间操作。...

    视图和索引的创建和使用实验报告.pdf

    本实验报告主要介绍了视图的创建、修改、使用和索引的创建、使用等知识点。 视图的创建 视图的创建可以使用 CREATE VIEW 语句,例如创建一个信息系学生基本情况视图 V_IS: CREATE VIEW V_IS AS SELECT * FROM ...

    创建索引和调优索引

    《创建索引和调优索引:SQL Server 2005中的...理解不同类型的索引及其工作原理,以及如何创建、管理、调整和删除索引,都是数据库管理员必备的技能。这不仅关乎数据的存取效率,也直接影响到系统的整体性能和稳定性。

    索引的SQL语句优化

    **基于索引的SQL语句优化**是提升数据库查询效率的有效手段之一,它通过合理设计和利用索引,减少数据检索的时间消耗,从而提升整体系统性能。 #### 核心概念与原则 **降龙十八掌**,这里被比喻成18条关键的优化...

    SQL语句索引优化_sql索引降龙十八掌(Oracle)

    在数据库管理领域,SQL语句的索引优化是提高数据查询效率的关键技术,尤其是在大型企业级应用中。本文将深入探讨Oracle数据库中的索引优化原则和方法,这些原则和方法同样适用于其他数据库系统。让我们一起领略"SQL...

    MySQL创建索引,查看以及删除

    MySQL是世界上最受欢迎的关系型数据库管理...理解各种索引类型,以及如何查看和删除索引,是每个数据库管理员和开发人员必备的技能。同时,结合实际业务需求,不断调整和优化索引策略,可以确保数据库系统的高效运行。

    MySql练习4:创建学生表和成绩表索引并查看索引.zip

    本练习主要涵盖了如何在学生表和成绩表中创建索引以及如何查看这些索引的详细信息。下面我们将深入探讨相关知识点。 1. **索引的概念**: 索引类似于书籍的目录,它为数据库中的数据提供快速访问的途径。当我们在...

    索引和视图的创建和修改

    - **使用SQL语句创建索引**: - **非唯一非聚集索引**: ```sql CREATE INDEX index_name ON table_name (column_name); ``` - **唯一非聚集索引**: ```sql CREATE UNIQUE INDEX index_name ON table_name ...

    视图和索引的创建及使用

    ### 数据库视图和索引的创建与使用详解 #### 实验目标概览 本次实验旨在深入了解数据库中的视图和索引概念,并掌握其在实际应用中的创建与使用技巧。通过理论结合实践的方式,使学习者能够理解视图与索引的作用机制...

    oracle创建表创建唯一索引

    以下将详细介绍如何创建学员信息表,创建唯一索引,以及如何修改表来添加主键和检查约束。 首先,我们来理解"创建学员信息表"。在Oracle中,我们可以使用`CREATE TABLE`语句来创建新的表。一个典型的学员信息表可能...

    sql server 重新组织和重新生成索引

    重新生成索引是创建一个新的索引,以替换原来的索引。重新生成索引可以消除索引中的碎片,提高查询性能。重新生成索引可以在线或脱机执行。 检测碎片 为了检测索引中的碎片,可以使用系统函数 sys.dm_db_index_...

    mysql中创建各种索引的语句整理.docx

    下面将详细介绍如何在MySQL中创建各种类型的索引,以及在何处添加索引来优化查询性能。 1. **主键索引(PRIMARY KEY)**: 主键索引是唯一的,不允许有重复值,且每个表只能有一个主键。它可以确保数据的唯一性和...

    Oracle为sdo_geometry创建空间索引

    本文将详细介绍如何在 Oracle 中创建空间索引,包括创建空间索引的步骤、注意事项和常见问题。 一、 创建空间索引前的准备 在创建空间索引之前,需要先创建一个包含 sdo_geometry 数据类型的表。sdo_geometry 是 ...

    MySQL数据库:使用NAVICAT工具创建和管理索引.pptx

    在MySQL中,索引的管理和创建是数据库性能优化的重要环节。NAVICAT是一款强大的数据库管理工具,支持多种数据库系统,包括MySQL,提供了一个直观的图形用户界面,使得数据库操作变得更为简单。 **创建索引** 1. **...

    Mysql数据库索引创建、索引删除、索引失效场景详解

    在MySQL数据库中,索引是提高查询效率的关键工具。它们为数据表的列提供了...了解各种索引类型、创建方法和可能导致失效的场景,可以帮助数据库管理员更好地管理和优化他们的数据库,从而提高查询效率和整体系统性能。

    mysql中创建各种索引的语句整理知识.pdf

    在 MySQL 中,创建索引的语句有多种,下面将对这些语句进行整理和解释。 一、索引的创建语句 1. 添加 PRIMARY KEY(主键索引) 在 MySQL 中,添加 PRIMARY KEY 索引的语句为: ALTER TABLE `table_name` ADD ...

Global site tag (gtag.js) - Google Analytics