索引概述

本文深入解析MySQL中的索引机制,包括各种索引类型如BTree、Hash、全文本及空间索引,以及如何通过创建和管理索引来优化查询性能。同时,文章提供了具体的SQL语句示例,帮助读者理解索引的创建和删除过程。
一 、 简述
  • 1、mysql所有列类型都可以被索引,对相关列使用索引可以提高select操作性能。根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(eg:myisam,innoDB,bdb,memory ,act.)对每个表至少支持16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。
  • 2、myisam和innodb存储引擎的表默认创建的是btree索引,memory存储引擎默认使用hash索引,但也支持btree索引;mysql目前还不支持函数索引,但支持前缀索引(即对索引字段的前n个字符创建索引)。前缀索引的长度和存储引擎相关。对myisam存储引擎的表,索引的前缀长度可以达到1000字节长,而对于innodb存储引擎的表,索引的前缀长度最长为767字节。前缀的长度限制单位为字节,但是 create table 语句中的前缀长度解释为字符数。
  • 3、mysql 中还支持全文本(fulltext)索引,该索引可以用于全文搜索。但是当前(5.0)版本中只有myisam存储引擎支持fulltext索引,且仅限于char,varchar,text列。索引总是对整个列进行的,不支持局部(前缀)索引。
  • 4、可以为空间列类型创建索引,仅myisam支持,且该索引字段必须非空。
二 、简单了解下索引

1)添加索引语法:

create [unique\fulltext\spatial] index index_name [using index_type] 
on tbl_name(index_col_name,....)
index_col_name:
col_name[(length)][asc|desc]

eg:创建索引: 为city表创建10个字节的前缀索引,create index cityname on city(city(10));

mysql> create index cityname on city(city(10));
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

以city为条件查询,可以看到使用了新建的索引 cityname:explain select * from city where city='tom' \G
在这里插入图片描述
2)索引的删除语法为:drop index index_name on tbl_name;
eg:想要删除city表刚建立的索引cityname:drop index cityname on city
在这里插入图片描述
三、小结
如果要访问大部分行,则顺序读取要快的多,因为此时要避免磁盘搜索;否则,最好按照索引列指定检索相关数据比较快。
附注:
查看当前表city建表结构,执行show create table city;

CREATE TABLE city (
  city_id smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  city varchar(50) NOT NULL,
  country_id smallint(5) unsigned NOT NULL,
  last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`city_id`),
  KEY `idx_fk_country_id` (`country_id`),
  CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) 
  REFERENCES `country` (`country_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值