MySQL建索引

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mysql 在数据库表中,使用索引可以大大提高查询速度
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。 索引 您可以在表中创建索引,以便更加快速高效地查询数据。 用户无法看到索引,它们只能被用来加速搜索/查询。 注释: 更新一个包含索引的表需要比更新一个没有索引的表更多的时间, 这是由于索引本身 也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE INDEX 实例 本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex

ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
创建索引:
1、主键索引 主要作用是确定数据库表里一条特定数据记录的位置。 最好为每一张数据表定义为一个主键索引。 一个表只能指定一个主键,主键的值不能为空。 指定主键有 2 种方法: (1) CREATE TABLE users( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ); (2) CREATE TABLE users( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) ); 2、唯一索引 unique 它和主键索引一样,都可以防止创建重复的值,不同的是,每个表可以有多个唯一索引。 3、常规索引 最重要的技术,提高数据库性能,索引优化首先考虑常规索引。 查询提高了,增删改减慢了。 key 和 index 是同义词,用哪个都可以。 创建方法: 单独创建常规索引: CREATE index 索引名称 on 表名(字段名,多个用逗号分隔); 删除: drop index 索引名称 on 表名; 创建表时创建常规索引: CREATE TABLE users( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, uid INT NOT NULL, index 索引名称(uid) ); 4、全文索引

fulltext 类型索引,只能在 MyISAM 表类型上使用,只有在 varchar,char,text 等文本字符 串上使用,也可以多个数据列使用。 CREATE TABLE books( id int, bookname varchar(30), price double, detail text not null, fulltext(detail,bookname), index ind(price), primary key(id) ); 正常查询:select * from books where bookname like '%php%'; 全文索引查询:select bookname,price from books where MATCH(detail) AGAINST('php'); 以上两种查询来比,全文索引查询效率比较高。
假如我们创建了一个 testIndex 表: CREATE TABLE testIndex(i_testID INT NOT NULL,vc_NameVARCHAR(16) NOT NULL); 我们随机向里面插入了 1000 条记录,其中有一条 i_testID vc_Name 555 erquan 在查找 vc_Name="erquan" 的记录 SELECT * FROM testIndex WHERE vc_Name='erquan'; 时,如果在 vc_Name 上已经建立了索引,MySql 无须任何扫描,即 准确可找到该记录!相反,MySql 会扫描所有记录,即要查询 1000。以索引将查询速度提 高 100 倍。 一、索引分单列索引和组合索引 单列索引: 即一个索引只包含单个列, 一个表可以有多个单列索引, 但这不是组合索引。 组合索引:即一个索包含多个列。 二、介绍一下索引的类型 1、普通索引。 这是最基本的索引,它没有任何限制。它有以下几种创建方式: (1)创建索引:CREATE INDEX indexNameON tableName(tableColumns(length)); 如果是 CHAR, VARCHAR 类型, length 可以小于字段实际长度;如果是 BLOB 和 TEXT 类 型,必须指定 length,下同。 (2)修改表结构:ALTER tableName ADDINDEX [indexName] ON (tableColumns(length)) (3)创建表的时候直接指定:CREATE TABLEtableName ( [...], INDEX [indexName] (tableColumns(length)) ;

2、唯一索引。 它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果 是组合索引,则列值的组合必须唯一。它有以下几种创建方式: (1)创建索引:CREATE UNIQUE INDEXindexName ON tableName(tableColumns(length)) (2)修改表结构:ALTER tableName ADDUNIQUE [indexName] ON (tableColumns(length)) (3) 创建表的时候直接指定: CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length)); 3、主键索引 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引: CREATE TABLE test(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOTNULL,PRIMARY KEY(i_testID)); 当然也可以用 ALTER 命令。记住: 一个表只能有一个主键。 4、全文索引 MySQL 从 3.23.23 版开始支持全文索引和全文检索。 删除索引的语法:DROP INDEX index_name ON tableName 三、单列索引和组合索引 为了形象地对比两者,再建一个表: CREATE TABLE myIndex ( i_testID INT NOT NULLAUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL,i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) ); 在这 10000 条记录里面 7 上 8 下地分布了 5 条 vc_Name="erquan" 的记录, 只不 过 city,age,school 的组合各不相同。 来看这条 T-SQL: SELECT i_testID FROMmyIndex WHERE vc_Name='erquan' AND vc_City='郑州' ANDi_Age=25; 首先考虑建单列索引: 在 vc_Name 列上建立了索引。执行 T-SQL 时,MYSQL 很快将目标锁定在了 vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉 vc_City 不等于"郑州"的记录,再排除 i_Age 不等于 25 的记录,最后筛选出唯一的符合 条件的记录。 虽然在 vc_Name 上建立了索引,查询时 MYSQL 不用扫描整张表,效率有所提高, 但离我们的要求还有一定的距离。同样的,在 vc_City 和 i_Age 分别建立的单列索引的效 率相似。

相关文档
最新文档