`
carrie_lynn
  • 浏览: 10225 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

索引的创建 和 使用

阅读更多
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。
  MySQL索引类型包括:
  (1)普通索引
  这是最基本的索引,它没有任何限制。它有以下几种创建方式:
  ◆创建索引
  CREATE INDEX indexName ON mytable(username(length));
  如果是 CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 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)) );
  删除索引的语法:
  DROP INDEX [indexName] ON mytable;
  (2)唯一索引
  它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
  ◆创建索引
   CREATE UNIQUE INDEX indexName ON mytable(username(length))
  ◆修改表结构
  ALTER mytable ADD UNIQUE [indexName] ON (username(length))
  ◆创建表的时候直接指定
  CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
  (3)主键索引
  它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
  CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
  当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
  (4)组合索引
  为了形象地对比单列索引和组合索引,为表添加多个字段:
  CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );
  为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
  ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);
  建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
  如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
  建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:
  usernname,city,age usernname,city usernname
  为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
  SELECT * FROM mytable WHREE username="admin" AND city="郑州" SELECT * FROM mytable WHREE username="admin"
  而下面几个则不会用到:
  SELECT * FROM mytable WHREE age=20 AND city="郑州" SELECT * FROM mytable WHREE city="郑州"
  (5)建立索引的时机
  到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引
。例如:
  SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city='郑州'
  此时就需要对city和age建立索引,由于mytable表的 userame也出现在了JOIN子句中,也有对它建立索引的必要。
  刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:
  SELECT * FROM mytable WHERE username like'admin%'
  而下句就不会使用:
  SELECT * FROM mytable WHEREt Name like'%admin'
  因此,在使用LIKE时应注意以上的区别。
  (6)索引的不足之处
  上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:
  ◆虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
  ◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
  索引只是提高效率的一个因素,如果你的 MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。
  (7)使用索引的注意事项
  使用索引时,有以下一些技巧和注意事项:
  ◆索引不会包含有NULL值的列

  只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有 NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
  ◆使用短索引
  对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
  ◆索引列排序
  MySQL查询只使用一个索引,因此如果 where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
  ◆like语句操作
  一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。不要在列上进行运算

  select * from users where YEAR(adddate)<2007;
  将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
   select * from users where adddate<‘2007-01-01’;
  ◆不使用NOT IN和<>操作
分享到:
评论

相关推荐

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

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

    视图和索引的创建及使用

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

    基于SQL Server数据库索引的创建与优化分析.pdf

    本文首先介绍了索引的相关概念和分类,然后以SQL Server的样本数据库(Northwind)为例,创建和使用聚簇索引和非聚簇索引,最后得出了索引创建和使用过程中的若干结论,旨在为SQL Server数据库索引创建和优化工作方面...

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

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

    数据库 创建索引 sql oracle

    创建索引可以使用 Enterprise Manager、Transact-SQL 语句和索引优化向导等方法。 * 用 Enterprise Manager 创建索引:选择创建索引的表并进入管理索引对话框,新建索引、编辑索引、删除索引等操作。 * 用 Transact...

    MySQL数据库:创建索引.pptx

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

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

    Oracle 在线创建索引和重组索引 Oracle 在线创建索引和重组索引是数据库管理员经常需要处理的问题。在线创建索引可以提高查询性能,而重组索引可以减少索引的碎片化和空间浪费。下面我们将详细介绍在线创建索引和...

    mysql实验报告+-+索引的创建与管理

    实验的目的是理解和熟练掌握索引的创建、管理和维护,包括单列索引、多列索引、唯一性索引以及全文索引的使用。通过这些操作,可以提高数据库查询的效率,优化数据访问性能。同时,了解不同存储引擎对索引的支持情况...

    SQLServer视图及索引的创建及使用

    资源名称:SQL Server 视图及索引的创建及使用内容简介: 本文档主要讲述的是SQL Server 视图及索引的创建及使用;目的是通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除通过企业管理器。希望本文档会给...

    oracle创建表创建唯一索引

    在Oracle数据库管理系统中,创建表和唯一索引是数据库设计中的关键步骤,它们对于数据的组织、查询效率和数据完整性至关重要。以下将详细介绍如何创建学员信息表,创建唯一索引,以及如何修改表来添加主键和检查约束...

    MySQL索引的创建与使用

    本文来自于csdn,本文主要通过示例介绍MySQL中的单列索引、组合索引的创建与使用,希望对您的学习有所帮助。索引有很多,且按不同的分类方式,又有很多种分类。不同的数据库,对索引的支持情况也不尽相同。索引的...

    数据库索引创建建议

    ### 数据库索引创建建议 #### 一、深入理解索引结构 索引在数据库管理中扮演着极其重要的角色,特别是在处理大量数据时。合理的索引设计能够显著提高查询性能,减少系统的响应时间。本文主要探讨数据库中的两种...

    创建索引和调优索引

    《创建索引和调优索引:SQL Server 2005中的索引管理》 在SQL Server 2005中,索引是数据库管理的关键要素,它们极大地提升了数据检索速度,尤其是在处理大规模数据时。索引可以分为多种类型,包括聚集索引和非聚集...

    索引和视图的创建和修改

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

    oracle 索引创建

    通过对Oracle索引创建的理解和掌握,我们可以有效地提升数据库查询性能,特别是在处理大规模数据集时。正确地创建和维护索引不仅能够显著加快查询速度,还能帮助优化整体数据库性能。希望本文能够为大家提供一定的...

    文件索引的创建 文件索引的创建 文件索引的创建

    总的来说,文件索引的创建是提升系统性能的重要手段,通过合理地设计和管理索引,可以显著加快数据的读取速度,从而优化整体的用户体验。在实际应用中,需要根据具体的业务场景和数据特性,选择最合适的索引策略,并...

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

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

    postgresql和oracle创建空间索引

    在PostgreSQL和Oracle中,虽然空间索引的创建通常通过SQL命令完成,但有时可能需要查看源码以了解底层实现,或者使用专门的空间数据管理工具,如QGIS、ArcGIS或Oracle SQL Developer,来辅助管理和操作空间数据。...

    Lucene3.0创建索引

    - 索引创建过程中可能会遇到各种异常,应添加适当的错误处理机制。 - 对于大量文档,可能需要考虑分批处理以避免内存溢出等问题。 通过以上步骤,我们可以有效地使用Lucene3.0来创建索引,从而提高文本数据的检索...

    oracle 索引创建.ppt

    在“湖南电信Oracle培训之索引创建.ppt”中,我们可推断出讨论的重点是如何在Oracle数据库中创建和理解索引的内部结构。 首先,索引分为几种主要类型,包括B树索引、位图索引、函数索引和全局唯一索引等。B树索引是...

Global site tag (gtag.js) - Google Analytics