seq搜索引擎优化至少包括那几步?(之索引个人学习记录之mysql索引索引概述(组图) )
优采云 发布时间: 2021-11-18 20:22seq搜索引擎优化至少包括那几步?(之索引个人学习记录之mysql索引索引概述(组图)
)
内容
MYSQL 索引
个人学习记录的mysql索引
索引概览
索引是一种用于高效获取数据库中数据的数据结构。除了数据,数据库系统还维护着满足特定搜索算法的数据结构。这些数据结构以某种方式引用(指向)数据,使数据可以通过该结构实现高级搜索算法,而这个数据结构就是索引。
左边是数据表,有两列七条记录,最左边是数据记录的物理地址(注意逻辑上相邻的记录不一定在磁盘上物理上相邻)。为了加快Col2的搜索速度,可以维护一个如右图所示的二叉搜索树。每个节点都收录一个索引键和一个指向对应数据记录物理地址的指针,这样可以通过二分查找快速获取对应的数据。
一般来说,索引本身也很大,不可能全部存储在内存中。因此,索引往往以索引文件的形式存储在磁盘上。索引是数据库中用于提高性能的最常用工具。
索引的优缺点
优势
(1) 类似于书籍的目录索引,提高了数据检索的效率,降低了数据库的IO。
(2)通过索引列对数据进行排序,降低数据排序的成本,减少CPU的消耗。
坏处
(1)其实索引也是一张表,里面存放着主键和索引字段,指向实体的记录,所以索引列也占用空间。
(2)索引虽然大大提高了查询效率,但也降低了更新表的速度,比如表行的INSERT、UPDATE、DELETE。因为在更新表的时候,MySQL不仅保存了数据,还保存了索引文件。每次更新添加索引列的字段,都会在更新带来的键值变化后调整索引信息。
索引结构
索引是在 MySQL 的存储引擎层实现的,而不是在服务器层。因此,每个存储引擎的索引不一定相同,也不是所有的存储引擎都支持所有的索引类型。MySQL目前提供以下4种索引:
BTREE结构
BTree 也称为多通道平衡搜索树。M-forked BTree的特点如下:
B+TREE结构
B+Tree 是 BTree 的一个变种。B+Tree和BTree的区别在于:
MYSQL中的B+TREE结构
MySql 索引数据结构针对经典的 B+Tree 进行了优化。在原有B+Tree的基础上,在相邻的叶子节点上增加一个链表指针,形成一个具有顺序指针的B+Tree,提高了区间访问的性能。
索引分类索引语法
创建表时,可以同时创建索引,也可以随时添加新索引。
创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name(index_col_name,...)
mysql> create index idx_city_name on city(city_name);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
查看索引
显示表中的索引
mysql> show index from city;
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| city | 0 | PRIMARY | 1 | city_id | A | 4 | NULL | NULL | | BTREE | | |
| city | 1 | idx_city_name | 1 | city_name | A | 4 | NULL | NULL | | BTREE | | |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
删除索引
删除表上的索引 index_name
mysql> drop index idx_city_name on city;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
更改命令添加
alter table table_name inedx/unique/fulltext index_name(col_list) // 主键(col_list)
添加通用/唯一/全文//主键索引
索引设计原则
索引的设计也可以遵循一些现有的原则来提高索引的效率。
对查询频率较高的表或者字段创建索引。
索引字段选择应从where子句中选取。
尽量使用唯一索引,区分度高,使用的效率越高。
索引的数量并不是多多益善,索引过多,维护的代价也越大。
使用短索引,在给定大小的存储块内可以存储更多的索引值。
复合索引多利用最左前缀原则。