`
jiangduxi
  • 浏览: 456684 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL5.0中索引的设计和使用

阅读更多
很多开发者对Mysql还是有深厚的感情,虽然现在已经被收购。至于MySQL的前途到底是否会被开源组织接手还是怎么样?这个就暂时无解了。不过我想至少MySQL的确有它的优势。废话就不说了。

下面讨论下MySQL5.0中的索引的设计和使用。任何东西设计的好,那么使用起来就顺手。不过很多时候给出设计什么规则这些都是相对的。做任何的事情,最重要的是能否根据当时情况就合理的调整你的设计。如果你只会看着书本或者权威来死套什么设计理念来进行实际的开发和设计的话,那么我请你还是少读书为妙。

索引是数据库中用来提高性能的常用工具。(注意如果要优化数据库的性能,这是一个点)。

  所有MySQL列类型都可以被索引,对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(MyISAM、InnoDB、BDB、MEMORY等)对每个表至少支持16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。
   MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引。MySQL目前还不支持函数索引,但是支持前缀索引,即对索引字段的前N个字符创建索引。前缀索引的长度跟存储引擎相关,对于MyISAM存储引擎的表,索引的前缀长度可以达到1000字节长,而对于Inn0DB存储引擎的表,索引的前缀长度最长是767字节。请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句中的前缀长度解释为字符数。在为使用多字节字符集的列指定前缀长度时一定要加以考虑。

MySQL中还支持全文本索引(FULLTEXT),该索引可以用于全文搜索。但是在Mysql5.0中只有MyISAM存储引擎支持全文本索引,并且仅仅局限于CHAR、VARCHAR和TEXT列。索引总是对整个列进行的,不支持局部索引。也可以为空间类型创建索引,但是只要MyISAM存储引擎支持空间类型索引,而且索引的字段必须是非空。

创建索引的语法如下:
引用

   CREATE [UNIQUE | FULLTEXT | SPATIAL] IDEX index_name
   [USING index_type]
   ON tb1_name (index_col_name,....)

index_col_name:
   col_name [(length)][ASC | DESC]

索引的创建可以在创建表的时候就创建,也可以随时增加新的索引。

下面给出一个例子:
引用

  create index personname on person (person(10))

查询,可以发现索引personname被使用
引用

explain select * from person where person='hi' \G

索引的删除语法为:
引用

DROP INDEX index_name ON tb1_name

如果想删除person表中的personname索引如下操作
引用

   drop index personname on person

上面简单的演示了索引的创建和删除。

接下来讨论下索引的设计原则:
   索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效地使用索引。

1. 搜索的索引列,不一定是所要选择的列。最合适索引的列式出现在WHERE子句中的列,或连接子句中指定的列,而不是出现在SELECT关键字后的选择列表中的列。
2. 使用唯一索引。考虑某列中值的分布。索引的列的基数越大,索引的效果越好。例如数据库中有好几年的资料,这些资料中有日期这个字段,而且查询中常常要区分日期。那么针对日期设索引就很容易区分。
3. 使用短索引。如果对字符串列进行索引,应该指定应该前缀长度,只要有可能就应该这样做。例如:如果有一个CHAR(200)的列,如果在前10个或20个字符内,多数值是唯一的。那么就不要对整个列进行索引。对前10个或者20个字符进行索引能够节省大量索引空间,也可能会是查询更快。较小的索引涉及的磁盘IO较少,较短的值比较起来更快。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此,MySQL也可以在内存中容纳更多的值。这样就增加了找到行而不用读取索引中较多块的可能性。
4.利用最左前缀。在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。多列索引起几个索引的作用,因为可利用索引中最左的列集来匹配行。这样的列集称最左前缀。
5. 不要过度索引。不要以为索引“越多越好”,什么东西都用索引时错误的。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。如果有一个索引很少利用或者从不使用,那么会不必要地减缓表的修改速度。此为MySQL在生成一个执行计划时,要考虑各个索引,这也要花费时间。创建多余的索引给查询优化带来了更多的工作。索引太多,也可能会使MySQL选择不到所要使用的最好索引。值保持所需的索引有利于查询优化。
6. 对于InnoDB存储引擎的表,记录默认会按照一个的顺序保存,如果有明确定义的主键,则按照主键顺序保存。如果没有主键,但是有唯一索引,那么就是按照唯一索引的顺序保存。如果既没有主键有没有唯一索引,那么表中会自动生成一个内部列,按照这个列的顺序保存。按照主键或者内部列进行的访问是最快的,所以InnoDB表尽量自己指定主键,当表中同时有几个列都是唯一的,都可以作为主键的时候,要选择最常作为访问条件的列作为主键,提高查询的效率。另外还需要注意,InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有效减少索引的磁盘占用,提高索引的缓存效果。


BTREE索引与HASH索引
   MEMORY存储引擎的表可以选择使用BTREE或者HASH索引,两种不同类型的索引各有其不同的适用范围。HASH索引有些重要的特征需要在使用的时候特别注意,如下所示:
1. 只用于使用=或<=>操作符的等式比较。
2. 优化器不能使用HASH索引来加速ORDER BY操作
3. MySQL不能确定在两个值之间大约有多少行。如果将一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询的执行效率。
4. 只能使用整个关键字来搜索一行。
而对于BTREE索引,当使用 > 、< 、>= 、<= 、BETWEEN 、!= 或者 <> ,或者LINKE'pattern'(其中'pattern'不以通配符开始)操作符时,都可以使用相关列上的索引。
分享到:
评论

相关推荐

    mysql5.0中文使用手册

    这份“mysql5.0中文使用手册”为那些对英文文档不熟悉的用户提供了一条便捷的学习路径,它涵盖了MySQL 5.0的所有主要功能和操作。 手册可能包括以下内容: 1. **安装与配置**:介绍如何在不同操作系统上安装MySQL ...

    PowerDesigner16.5版本包含MySQL5.0模型的DBMS文件

    通过这些模型,你可以设计数据库的结构,如表、字段、键、索引等,并能生成相应的DDL脚本,直接在MySQL5.0数据库中执行创建数据库。此外,PowerDesigner还支持数据流图(DFD)、业务流程图(BPMN)等,提供全面的...

    MySql5.0使用手册

    MySQL 5.0是世界上最流行的开源关系型数据库管理系统之一,其功能强大且易于使用,尤其在Web...以上是MySQL 5.0使用手册中的主要知识点,通过深入学习和实践,你可以熟练地管理和操作MySQL数据库,满足各种应用需求。

    Mysql 5.0 32位

    MySQL 5.0 是一个广泛使用的开源关系型数据库管理系统,尤其适合初学者和小型项目。它的32位版本在此提供,适用于那些运行32位操作系统的用户。在本文中,我们将深入探讨MySQL 5.0的关键特性、安装过程、基本操作...

    mysql5.0中文手册

    MySQL 5.0中文手册是一份详尽的指南,涵盖了MySQL数据库系统5.0版本的主要特性和功能。MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、可靠和易于使用而受到全球开发者的青睐。以下是手册中...

    mysql5.0中英文对照手册

    MySQL 5.0是数据库管理系统领域中广泛应用的一个版本,它为开发者提供了强大的数据存储和管理功能。本手册旨在深入解析MySQL 5.0的各种特性和功能,帮助用户更好地理解和使用这个数据库系统。以下是对手册中可能包含...

    mysql 5.0 解压版

    6. **性能优化**:MySQL 5.0中可以通过调整各种系统变量和配置参数来优化性能,例如`innodb_buffer_pool_size`用于控制InnoDB引擎缓存的数据量,`key_buffer_size`则影响MyISAM表的索引缓存。 7. **安全性**:应...

    mysql5.0 安装板

    MySQL 5.0 是一个广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易用性而闻名。这款安装板是专为64位操作系统设计的,确保在64位环境下能顺利安装并运行MySQL服务。MySQL 5.0版本包含了多种关键...

    mysql5.0+详细教程

    这个“mysql5.0+详细教程”涵盖了从安装到实际操作的全过程,对于初学者和进阶用户都是极好的学习资源。 首先,我们需要了解MySQL 5.0的安装过程。`Setup.exe`文件通常是安装程序,这意味着教程可能包含了Windows...

    mysql 5.0 for windows

    MySQL 5.0提供了许多性能优化工具和策略,如索引优化、查询优化、缓存机制等。正确配置MySQL服务器参数,合理设计数据库结构,以及编写高效的SQL语句,都是提高系统性能的关键。 总结,MySQL 5.0 for Windows是一个...

    mysql5.0安装包+安装步骤文档

    MySQL 5.0是数据库管理系统领域中非常经典的一个版本,它是开源、免费的,并且广泛应用于网站开发、数据存储和管理。在这个安装包中,包含了MySQL 5.0的安装程序以及详细的安装步骤文档,这对于那些需要搭建数据库...

    MySql5.0工具

    在安装和使用MySQL 5.0时,"mysql工具.exe"可能是用于安装、配置或管理MySQL数据库的实用程序。这些工具可能包括MySQL安装向导、命令行客户端、数据库管理工具(如MySQL Workbench前身MySQL Administrator和MySQL ...

    MySQL5.0常用命令

    MySQL5.0是一款广泛使用的开源关系型数据库管理系统,它的强大在于其灵活性、高效性和稳定性。这份PDF文档很可能是关于MySQL5.0版本中常用数据库管理命令的集合,对于数据库管理员和开发人员来说是非常实用的学习...

    mysql5.0中文版手册

    MySQL 5.0是世界上最流行的开源关系型数据库管理系统之一,其功能强大且易于使用,尤其在Web应用程序开发中被广泛采用。本手册是MySQL 5.0版本的中文官方文档,旨在帮助用户全面理解并掌握MySQL的各项功能和操作。 ...

    MySQL Server 5.0.

    这个版本在MySQL的进化历程中扮演了关键角色,引入了许多新特性,提升了性能,并对安全性和可扩展性进行了优化。 一、新特性与改进 1. InnoDB存储引擎:MySQL 5.0强化了InnoDB存储引擎,使其成为默认的事务处理引擎...

    MySql5.0安装及使用说明压缩包

    总的来说,这个压缩包为初学者提供了一个全面的学习起点,不仅可以帮助他们安装MySQL,还可以了解其基本使用和API调用,进一步提升数据库管理和开发的能力。在实际操作中,用户应结合这些文档和实践,以便更好地理解...

    mysql5.0数据库

    MySQL 5.0是MySQL数据库管理系统的一个重要版本,它在2005年发布,带来了许多新特性和改进。MySQL是一种流行的开源关系型数据库系统,广泛应用于Web应用程序,特别是与PHP、Java、Python等编程语言结合使用。在这个...

Global site tag (gtag.js) - Google Analytics