优秀的编程知识分享平台

网站首页 > 技术文章 正文

数据库自学捷径-第七课 MySQL进阶-怎么提高搜索速度?索引

nanyue 2024-11-19 07:55:32 技术文章 4 ℃

假如你去图书馆,借MySQL数据库方面的书籍,你要先找到计算机分类的房间,再找到数据库技术与应用的书柜,最后找到MySQL数据库等方面的书籍,其实这就是人工索引,即使你能从图书馆电脑软件里面搜索到你要的书籍,实际拿到手也得通过分类索引找到该书。

同样MySQL的索引的目的就是快速地找到你所需要的数据,首先你只要知道这件事就足够了。

索引的实现

可以采用简单的hash,二叉树,或者复杂的B树,B+树等方法来实现,MySQL是采用B+树索引数据结构,网上有大量的相关资料,我们在此不予赘述,我们只需了解MySQL是采用B+树来实现的就行了。

MySQL 索引分类

· 主键索引

在建表时会给表设置一个主键,MySQL 会默认给这个主键加上索引。

· 唯一索引

索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

语句:

CREATE UNIQUE INDEX uq_name ON user(column);

或者ALTER TABLE table_name ADD UNIQUE uq_name ON (column);

问:能不能给costomer表创建唯一索引?

不可以,因为存在同名同姓的记录,但可以创建普通索引以提高查询速度。


· 普通索引

MySQL 基本的索引,没有什么限制。

语句:

CREATE INDEX ind_name ON customer(name);

或者ALTER TABLE customer ADD INDEX ind_name ON (name);

执行语句后创建了索引,试一下:

select * from customer where name='范玉莲';

有没有觉得快点?哈哈,不会有的,起码表中也得有上成千上万条数据才会有感觉吧。


· 组合索引

组合索引,顾名思义,给 MySQL 多个字段同时加上索引,在使用时要遵循最左匹配原则。

语句:

CREATE INDEX index_name ON user(column1,column2) -- 给 column1 和 column2 加上索引

· 全文索引

全文索引,主要用来查找文本中的关键字,不是直接与索引值相比较。与我们常见的搜索引擎(如elasticsearch、solr 等)功能相似。MySQL 全文索引性能一般,所以一般不用,作为了解即可。


创建适当的索引

索引是不是越多越好?不是的!由于索引要占据存储空间的,数据插入或更新时也需要更新索引,要耗费时间的,因此索引不是越多好。组合索引有必要的时候在用,有时宁肯创建两个索引来替代它。


索引优化

1、慢查询

慢查询日志是 MySQL 提供的日志记录,用来记录所有的慢 SQL 语句,我们可以通过设置慢查询的时间阈值 long_query_time,来定义什么样的 SQL 是慢 SQL。通过慢查询日志我们可以找出需要优化的 SQL,下一步就是进行 SQL 优化。

2、Explain 执行计划

通过上面的慢查询日志分析,我们可以知道有哪些慢 SQL 语句。但是这些 SQL 具体慢在哪里,需要如何优化,我们还需要更详细的分析计划,这里 MySQL 给我们提供了 Explain 关键字,通过该关键字我们可以分析出 SQL 语句的详细执行信息。

索引的优化目前只需了解一下,直到你进行项目开发时再去学习都可以的。


当你的customer表加入了潘长江,潘长河等,那么我们怎么一下子查询出以‘潘长’开头的所有客户?下节课我们介绍模糊查询,敬请期待。

最近发表
标签列表