mysql中的索引相关知识
-
MySQL中的索引(一)概述索引在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据。这种数据结构就是索引,它能够帮助我们高效获取数。索引的优点提高数据查询速度,降低数据库的IO成本;通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。索引的缺点降低INSERT、UPDATE、DELETE的操作数据,因为要更新索引;索引也需要维护一张表,会占用物理空间。哪些情况需要创建索引1.主键自动建立唯一索引 2.频繁作为查询条件的字段应该创建索引 3.查询中与其他表关联的字段,外键关系建立索引 4.单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引) 5.查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度 6.查询中统计或者分组字段哪些情况不要创建索引1.表记录太少 2.经常增删改的表。 3.某个数据列唯一性很差(包含许多重复的内容),为它建立索引就没有太大的实际效果。 4.WHERE条件里用不到的字段不创建索引MySQL中的索引索引的类型MySQL
-
mysql的索引类型,不看不知道!关于mysql中的索引类型,除了常见的普通索引,唯一索引,组合索引,今天再给大家总结分享一些mysql中的索引类型:聚簇索引 (Clustered Index)非聚簇索引主键索引(PRIMARY KEY)辅助索引(Secondary Indexes)HASH索引BTREE索引T-TREE索引R-Tree索引自适应hash索引(Adaptive Hash Index)唯一索引 (UNIQUE Indexs)普通索引 (Normal index)全文索引 (FULLTEXT Indexes)空间索引 (Spatial indexes)组合索引 (Multiple-Column Indexes)覆盖索引倒序索引 (Descending Indexes)不可见索引(Invisible Indexes) 以上是比较全面的介绍了mysql中索引类型。如果你还知道什么其他类型的索引可以关注慕课网~
-
一篇文章带你熟悉myql索引一、什么是索引?为什么要使用索引? 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据 假设现在要你找到一本书的第三章第二节,你会怎么做,一般都会去目录找到对应章节的页数,然后翻到对应页,其实这就是目录索引,帮助读者快速找到想要的章节。mysql中的索引,就类似一本书
-
mysql 添加索引 mysql 如何创建索引1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 4.添加FULLTEXT(全文索引) mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 5.添加多列索引 mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )下面是更加详细的方法MySQL中可以使用alter table这个SQL语句来
mysql中的索引相关课程
-
MySQL提升课程 全面讲解MySQL架构设计 如何获得MySQL最优性能?如何建立MySQL高可用集群?如何搭建稳定高效的MySQL环境?国内顶级电商公司数据库专家带你成为一名优秀的DBA。
讲师:sqlercn 中级 4052人正在学习
mysql中的索引相关教程
- MySQL 索引详细解读 索引是数据库中用来提高性能的常用工具。本节主要介绍 MySQL 索引的概念,及其优点。
- 1.索引概念 索引在 MySQL 中也叫“键(Key)”,是存储引擎用于快速查找记录的一种数据结构,这也是索引的基本功能。MySQL 索引的工作原理,类似一本书的目录,如果要在一本书中找到特定的知识点,先通过目录找到对应的页码。在 MySQL 中,存储引擎用类似的方法使用索引,先在索引找到对应值,再根据索引记录找到对应的数据行。简单总结,索引就是为了提高数据查询的效率,跟一本书的目录一样。以下查询假设字段 c2 上建有索引,则存储引擎将通过索引找到 c2 等于 测试01 的行。也就是说,存储引擎先在索引按值进行查找,再返回所有包含该值的数据行。mysql> select * from t1 where c2='测试01'\G*************************** 1. row ***************************c1: 1c2: 测试011 row in set (0.00 sec)从执行计划的角度,也可以看出索引 idx_c2 被使用:mysql> create table t1( -> c1 int not null auto_increment, -> c2 varchar(10) default null, -> primary key(c1) -> ) engine = innodb;Query OK, 0 rows affected (0.05 sec)mysql> insert into t1() values(1,'测试01');Query OK, 1 row affected (0.00 sec)mysql> create index idx_c2 on t1(c2);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> explain select * from t1 where c2='测试01'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 partitions: NULL type: refpossible_keys: idx_c2 key: idx_c2 key_len: 33 ref: const rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.00 sec)常见的索引类型主要有 B-Tree 索引、哈希索引、空间数据索引(R-Tree)、全文索引,在后续小节将详细介绍。InnoDB 和 MyISAM 存储引擎可以创建 B-Tree 索引,单列或多列都可以创建索引;Memory 存储引擎可以创建哈希索引,同时也支持 B-Tree 索引;从 MySQL5.7 开始,InnoDB 和 MyISAM 存储引擎都可以支持空间类型索引;InnoDB 和 MyISAM 存储可以支持全文索引(FULLTEXT),该索引可以用于全文搜索,仅限于CHAR、VARCHAR、TEXT 列。
- 1. B-Tree 索引 B-Tree 索引是最常见的索引之一,当大家在谈论索引的时候,如果没有特别说明,那多半说的就是 B-Tree 索引。在 MySQL 中,大多数的存储引擎都支持 B-Tree 索引。
- 4. 覆盖索引 如果一个索引包含所有需要查询的字段,称之为覆盖索引。由于覆盖索引无须回表,通过扫描索引即可拿到所有的值,它能极大地提高查询效率:索引条目一般比数据行小的多,只通过扫描索引即可满足查询需求,MySQL 可以极大地减少数据的访问量。表 customer 有一个多列索引 (first_name,last_name),以下查询只需要访问 first_name 和last_name,这时就可以通过这个索引来实现覆盖索引。mysql> explain select last_name, first_name from customer\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: customer partitions: NULL type: indexpossible_keys: NULL key: idx1_customer key_len: 186 ref: NULL rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.00 sec)当查询为覆盖索引查询时,在 explain 的 extra 列可以看到 Using index。
- 3. 合适的索引列顺序 在一个多列 B-Tree 索引中,索引列的顺序表示索引首先要按照最左列进行排序,然后是第二列、第三列等。索引可以按照升序或降序进行扫描,以满足精确符合列顺序的 order by、group by 和 distinct 等的查询需求。索引的列顺序非常重要,在不考虑排序和分组的情况下,通常我们会将选择性最高的列放到索引最前面。以下查询,是应该创建一个 (last_name,first_name) 的索引,还是应该创建一个(first_name,last_name) 的索引?mysql> select * from customer where last_name = 'Allen' and first_name = 'Cuba'我们首先来计算下这两个列的选择性,看哪个列更高。mysql> select count(distinct last_name)/count(*) last_name_selectivity, count(distinct first_name)/count(*) first_name_selectivity from customer;+-----------------------+------------------------+| last_name_selectivity | first_name_selectivity |+-----------------------+------------------------+| 0.053 | 0.372 |+-----------------------+------------------------+很明显,列 first_name 的选择性更高,所以选择 first_name 作为索引列的第一列:mysql> alter table customer add index idx1_customer(first_name,last_name);
- 2. 索引优点 索引最大的作用是快速查找数据,除此之外,索引还有其他的附加作用。B-Tree 是最常见的索引,按照顺序存储数据,它可以用来做 order by 和 group by 操作。因为 B-Tree 是有序的,将相关的值都存储在一起。因为索引存储了实际的列值,某些查询仅通过索引就可以完成查询,如覆盖查询。总的来说,索引三个优点如下:索引可以大大减少 MySQL 需要扫描的数据量;索引可以帮助 MySQL 避免排序和临时表;索引可以将随机 IO 变为顺序 IO。但是,索引是最好的解决方案吗?任何事物都是有两面性的,索引同样如此。索引并不总是最好的优化工具对于非常小的表,大多数情况,全表扫描会更高效;对于中大型表,索引就非常有效;对于特大型表,建索引和用索引的代价是日益增长,这时候可能需要和其他技术结合起来,如分区表。总的来说,只有当使用索引利大于弊时,索引才是最好的优化工具。
mysql中的索引相关搜索
-
mac osx
machine_start
macox
magellan
malloc
manifest
manifest文件
map
map 遍历
mapreduce编程
maps google com
margin
margin bottom
margin left
margin right
margin top
marginbottom
marginheight
marginleft
margintop