mysql分区索引相关知识
-
MySQL索引之主键索引在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别?上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。1、主键索引主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则:1、采用一个没有业务用途的自增属性列作为主键;2、主键字段值总是不更新,只有新增或者删除两种操作;3、不选择会动态更新的类型,比如当前时间戳等。这么做的好处有几点:1、新增数据时,由于主键值是顺序增长的,innodb page发生分裂的概率降低了;可以参考以往的分享“[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键”;2、业务数据有变更时,不修改主键值,物理存储位置发生变化的概率降低了,innodb page中产生碎片的概率也降低了。MyISAM表因为是堆组织表,主键类型设计方面就可以
-
MySQL Hash索引和B-Tree索引的区别 MySQL Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。 可 能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。(1)MySQL Hash索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。由于 MySQL Hash索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash
-
Mysql索引分类在绝大多数情况下,Mysql索引都是基于B+树的,而索引可以提高数据查询的效率。 但是Mysql是如何利用B+树进行查询的呢?索引的作用只是提高查询效率吗? Mysql中的B+Tree索引 假设有一张教师表,里面有教师编号、名字、学科、薪资四个字段。 当你执行下面这条创建索引的sql语句时: create index id_name on teacher(name); Mysql就会在磁盘中构建这样一颗B+树: 这样一棵树有什么用呢?首先当然是加速查询。 举个简单的例子,假设现在要查找名字为“Mozart”的教师的数据: select
-
Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态(一)问题:最近在做Oracle数据清理,在对分区表进行数据清理时,采用的方法是drop partition,删除的过程中,没有遇到任何问题,大概过了10分钟,开发人员反馈部分分区表上的业务失败。具体错误为:ORA-01502错误:索引或这类索引的分区处于不可用状态(英文:ora-01502:index 'schema.index_name' or partition of such index is in unusable state)。(二)原因分析查看出现问题的分区表,均有一个共同点:表上以“pk_”开头的索引为unusable状态,以“pk_”开头的索引是随创建主键约束而创建的。当用户在创建主键约束或唯一性约束的时候,会在相应的列上创建唯一性索引经过查证,发现是在删除分区的时候,导致分区表上的唯一性全局索引为不可用状态,导致新的数据无法正常插入,从而引发了该错误。是不是索引不可用会导致DML操作失败呢?经过验证,发现以下特点:1.对于非唯一性索引,如果索引不可用,是不会影响到到DML操作的;2.对于
mysql分区索引相关课程
mysql分区索引相关教程
- MySQL 索引详细解读 索引是数据库中用来提高性能的常用工具。本节主要介绍 MySQL 索引的概念,及其优点。
- 2. 索引优点 索引最大的作用是快速查找数据,除此之外,索引还有其他的附加作用。B-Tree 是最常见的索引,按照顺序存储数据,它可以用来做 order by 和 group by 操作。因为 B-Tree 是有序的,将相关的值都存储在一起。因为索引存储了实际的列值,某些查询仅通过索引就可以完成查询,如覆盖查询。总的来说,索引三个优点如下:索引可以大大减少 MySQL 需要扫描的数据量;索引可以帮助 MySQL 避免排序和临时表;索引可以将随机 IO 变为顺序 IO。但是,索引是最好的解决方案吗?任何事物都是有两面性的,索引同样如此。索引并不总是最好的优化工具对于非常小的表,大多数情况,全表扫描会更高效;对于中大型表,索引就非常有效;对于特大型表,建索引和用索引的代价是日益增长,这时候可能需要和其他技术结合起来,如分区表。总的来说,只有当使用索引利大于弊时,索引才是最好的优化工具。
- 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 列。
- 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。
- 2. 前缀索引 有时候需要对很长的字符列创建索引,这会使得索引变得很占空间,效率也很低下。碰到这种情况,一般可以索引开始的部分字符,这样可以节省索引产生的空间,但同时也会降低索引的选择性。那我们就要选择足够长的前缀来保证较高的选择性,但是为了节省空间,前缀又不能太长,只要前缀的基数,接近于完整列的基数即可。Tips:索引的选择性指,不重复的索引值(也叫基数,cardinality)和数据表的记录总数的比值,索引的选择性越高表示查询效率越高。完整列的选择性:mysql> select count(distinct last_name)/count(*) from customer;+------------------------------------+| count(distinct last_name)/count(*) |+------------------------------------+| 0.053 |+------------------------------------+不同前缀长度的选择性:mysql> select count(distinct left(last_name,3))/count(*) left_3, count(distinct left(last_name,4))/count(*) left_4, count(distinct left(last_name,5))/count(*) left_5, count(distinct left(last_name,6))/count(*) left_6 from customer;+--------+--------+--------+--------+| left_3 | left_4 | left_5 | left_6 |+--------+--------+--------+--------+| 0.043| 0.046| 0.050| 0.051|+--------+--------+--------+--------+从上面的查询可以看出,当前缀长度为 6 时,前缀的选择性接近于完整列的选择性 0.053,再增加前缀长度,能够提升选择性的幅度也很小了。创建前缀长度为6的索引:mysql> alter table customer add index idx_last_name(last_name(6));前缀索引可以使索引更小更快,但同时也有缺点:无法使用前缀索引做 order by 和 group by,也无法使用前缀索引做覆盖扫描。
- 1. B-Tree 索引 B-Tree 索引是最常见的索引之一,当大家在谈论索引的时候,如果没有特别说明,那多半说的就是 B-Tree 索引。在 MySQL 中,大多数的存储引擎都支持 B-Tree 索引。
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