MySQL-索引分析和优化

1. 索引是如何工作的
MySQL 有数种方法来访问一个表中的行。两个最广为人知的方法就是顺序访问方法 (sequential access method,也叫做扫描或浏览)和索引访问方法 (indexed access method)。

顺序访问方法是一行一行地浏览一个表的所有记录。表中的每一行都要读取到。如果一个表由很多行组成,这种方法是非常低效的,就好像一页一页地浏览电话簿。如果我们要找名字以L开头的某个人的电话号码,肯定不想要从字母A开始察看。
当MySQL使用索引访问方法的时候,它只是读取那些表现出了所需特性的行。然而,必须要有一个索引。索引是一个表的一种替代的访问,可以比作为一本书的索引,利用索引可以快速查找所需信息,无须阅读整本书。

2. 索引的作用
索引是用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。

3. 索引类型
主键索引:是关系数据库中最常见的索引类型。它用于根据主键自身的唯一性来唯一标识每条记录。因为,该键必须是该记录所表示实体唯一拥有的值,或者是数据库生成的唯一的值,例如:自增加整数值。这样,无论是否删除以前存在的记录,每条记录都有唯一的主键索引。每个表只能有一个主键。此外,任何指定为主键的字段不能包含NULL值,即使没有显式声明为NOT NULL,MySQL也会自动赋予此特性。主键一般在创建表的时候指定,例如:CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) );

唯一索引:与主键索引一样,唯一索引可防止创建重复的值。不同之处在于,每个表只能有一个主键索引,但可以有多个唯一索引。例如:CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);

常规索引:最基本的索引类型,可以同时创建一个或多个字段的索引。创建索引:CREATE INDEX <索引的名字> ON tablename (列的列表);如:CREATE INDEX fieldid ON maps_field (fieldid ASC)

全文索引:从版本3.23.23开始支持这种类型的索引。它提供了一种高效的方法来搜索存储在CHAR、 VARCHAR 或 TEXT 数据类型中的文本。虽然创建全方索引非常类似于创建其他类型的索引,但基于全文索引的获取查询却有所不同。基于全文索引获取数据时,SELECT 查询使用两个特殊的MySQL 函数,MATCH() 和 AGAINST()。利用这两个函数,就可以针对全文索引执行自然语言搜索,如:
SELECT fieldid, fieldname WHERE MATCH(fieldname) AGAINST('woo');
该查询列出在 fieldname 字段中出现 ”woo“的记录。


优化的方法部分待......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值