oracle索引

[内功修神]MySQL高级

自古美人都是妖i 提交于 2020-02-12 15:16:04
个人博客文章地址 文章目录 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 2. 索引优化分析 2.1. 常见通用的join查询 2.2. 索引简介 2.2.1. 定义:排好序的快速查找数据结构 2.2.2. 优势 2.2.3. 劣势 2.2.4. mysql索引分类 2.2.5. mysql索引结构 2.2.6 哪些情况需要创建索引 2.2.7 哪些情况不要创建索引 2.3. 性能分析 2.3.1 MySQL Query Optimizer![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212101223600.png) 2.3.2 MySQL常见瓶颈 2.3.3 Explain 2.3.3.1 是什么(查看执行计划) 2.3.3.2 能干嘛 2.3.3.3 怎么玩 2.3.3.4 各个字段解释 2.3.4 索引优化 2.3.4.1 索引失效(应该避免) 2.3.4.1 一般性建议 3. Mysql锁机制 3.1 锁的分类 3.2 三锁 3.2.1 表锁(偏读) 3.2.2 行锁(偏写) 3.2.3 页锁 4. 主重复制 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 查看命令 MyISAM和InnoDB 2. 索引优化分析 2.1. 常见通用的join查询 SQL执行顺序 join图 2.2. 索引简介 2

Mysql索引学习笔记

空扰寡人 提交于 2020-02-12 07:05:38
1、分类   MySQL索引分为 普通索引、唯一索引、主键索引、组合索引、全文索引 。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。 (1)普通索引:create index index_name on table(column); 或者创建表时指定,create table(..., index index_name column); (2)唯一索引:类似普通索引,索引列的值必须唯一(可以为空,这点和主键索引不同) create unique index index_name on table(column);或者创建表时指定unique index_name column (3)主键索引:特殊的唯一索引,不允许为空,只能有一个,一般是在建表时指定primary key(column) (4)组合索引:在多个字段上创建索引,遵循最左前缀原则。alter table t add index index_name(a,b,c);    最左前缀原则 : https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g (5)全文索引:主要用来查找文本中的关键字,不是直接与索引中的值相比较,像是一个搜索引擎,配合match against使用,现在只有char,varchar

《精通Oracle SQL(第2版)》PDF

浪子不回头ぞ 提交于 2020-02-10 09:47:00
一:下载途径 二:图书图样 三:目录 第1章 SQL核心  1.1 SQL语言  1.2 数据库的接口  1.3 SQL*Plus回顾  1.3.1 连接到数据库  1.3.2 配置SQL*Plus环境  1.3.3 执行命令  1.4 5个核心的SQL语句  1.5 SELECT语句  1.5.1 FROM子句  1.5.2 WHERE子句  1.5.3 GROUP BY子句  1.5.4 HAVING子句  1.5.5 SELECT列表  1.5.6 ORDER BY子句  1.6 INSERT语句  1.6.1 单表插入  1.6.2 多表插入  1.7 UPDATE语句  1.8 DELETE语句  1.9 MERGE语句  1.10 小结  第2章 SQL执行  2.1 Oracle架构基础  2.2 SGA共享池  2.3 库高速缓存  2.4 完全相同的语句  2.5 SGA缓冲区缓存  2.6 查询转换  2.6.1 查询块  2.6.2 视图合并  2.6.3 子查询解嵌套  2.6.4 联结消除  2.6.5 排序消除  2.6.6 谓词推进  2.6.7 使用物化视图进行查询重写  2.7 确定执行计划  2.8 执行计划并取得数据行  2.9 SQL执行——总览  2.10 小结  第3章 访问和联结方法  3.1 全扫描访问方法  3.1.1

Oracle中唯一约束和唯一索引的区别

非 Y 不嫁゛ 提交于 2020-02-10 07:09:36
在使用TOAD来操作Oracle数据库时,会注意到创建约束时有Primary Key、Check、Unique和Foreign Key四种类型的约束,这与SQL Server中的约束没有什么区别,这里的Check约束除了用于一般的Check约束外,在Oracle中也用于非空约束的实现。也就是说如果一个字段不允许为空,则系统将会创建一个系统的Check约束,该约束定了某字段不能为空。 除了约束,还有另外一个概念是索引,在TOAD中创建索引的界面如下: 我们可以注意到在唯一性组中有三个选项:不唯一、唯一和主键。那么创建索引时的唯一、主键与创建约束时候的唯一约束和主键约束有什么区别呢? 这里的可能容易产生误解,其实创建主键的结果是一样的,不管是在创建约束时创建还是创建索引时创建,都会创建一个主键约束和对应的一个唯一索引。 创建唯一约束与创建唯一索引有所不同: 创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。 创建唯一索引只会创建一个唯一索引,不会创建Constraint。 也就是说其实唯一约束是通过创建唯一索引来实现的。对于前端开发人员来说这两者有什么区别吗?好像没有。都是不能插入重复的值。在删除时这两者也有一定的区别,删除唯一约束时可以只删除约束而不删除对应的索引,所以对于的列还是必须唯一的,而删除了唯一索引的话就可以插入不唯一的值。

数据库必知知识

不想你离开。 提交于 2020-02-08 10:40:08
1、触发器的作用: 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。 3、存储过程的优缺点: 优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差 4、存储过程与函数的区别 存储过程 1、用于在数据库中完成特定的操作或者任务(如插入、删除等) 2、程序头部声明用procedure 3、程序头部声明时不需描述返回类型可以使用in/out/in out 三种模式的参数 4、可作为一个独立的PL/SQL语句来执行 5、可以通过out/in out 返回零个或多个值 6、SQL语句(DML

数据库——百万级数据库优化方案

时光总嘲笑我的痴心妄想 提交于 2020-02-05 14:27:12
** 百万级数据库优化方案 ** 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。 不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num = 0 3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num = 10 or Name = 'admin' 可以这样查询:

Mysql 索引

好久不见. 提交于 2020-02-05 02:07:38
一. 存储引擎 1. 什么是存储引擎? 与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。MySQL数据库在实际的工作中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作。简而言之,就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 2. 存储引擎种类 存储引擎 说明 MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务 InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,比MyISAM处理速度稍慢 ISAM MyISAM的前身,MySQL5.0以后不再默认安装 MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用 Memory 内存存储引擎

ORACLE ANALYZE使用小结

佐手、 提交于 2020-02-04 13:55:56
ANALYZE 的介绍 使用 ANALYZE 可以收集或删除对象的统计信息、验证对象的结构、标识表或 cluster 中的行迁移 / 行链接信息等。官方文档关于 ANALYZE 功能介绍如下: · Collect or delete statistics about an index or index partition, table or table partition, index-organized table, cluster, or scalar object attribute. · Validate the structure of an index or index partition, table or table partition, index-organized table, cluster, or object reference (REF). · Identify migrated and chained rows of a table or cluster. · ANALYZE 的使用 ANALYZE TABLE 可以指定分析: 表、所有字段、所有索引字段、所有索引。 若不指定对应对象则表示全部都分析 # 完全分析,采样 100% ANALYZE TABLE TABLE_NAME COMPUTE STATISTICS; ANALYZE TABLE

oracle组合索引整理

泄露秘密 提交于 2020-02-04 07:44:58
最近刚好又聊到了组合索引,由于担心自己记忆的不准确就实践了一番,结果发现和百度的好像不太一样,对此有疑惑的我,于是写下了这篇文章,希望对大家有用。 第一种情况:组合索引(主键) 1、建表 -- CREATE TABLE CREATE TABLE A ( AID NUMBER NOT NULL, ACOU NUMBER NOT NULL, ACOUA CHAR(30) NOT NULL ) TABLESPACE BDCK PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED ); -- CREATE/RECREATE PRIMARY, UNIQUE AND FOREIGN KEY CONSTRAINTS ALTER TABLE A ADD CONSTRAINT PA PRIMARY KEY (AID, ACOU, ACOUA) USING INDEX TABLESPACE BDCK PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED ); 2、数据生成,我用的PLSQL的数据生成工具 3、索引测试

不走索引的几种情况

眉间皱痕 提交于 2020-02-02 17:29:25
1、查询谓词没有使用索引的主要边界,换句话说就是SELECT *可能会导致不走索引。 比如:SELECT * FROM T1 WHERE C1 = ‘XXX’;假如你的T1表上有一个包含C1值的组合索引,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成SELECT C1 FROM T1 WHERE C1 = ‘XXX’;优化器会直接去索引中找到C1的值,因为从B树中就可以找到相应的值。 2、单键值的B树索引列上存在null值,导致COUNT( )不能走索引。 比如:在B树索引中有一个空值,那么查询SELECT COUNT( ) FROM T1;的时候,因为HASHSET中不能存储空值,所以优化器不会走索引,有两种方式可以让索引有效,一种是SELECT COUNT(*) FROM T1 WHERE XXX IS NOT NULL;或者把这个字段的属性改为not null。 3、索引列上有函数运算,导致不走索引。 比如:SELECT * FROM T1 WHERE EXTRACT(YEAR FROM C1) = ‘XXX’;即使在T1表上有一个索引包含C1字段,这个时候索引也不会被用到,因为你要查询的列中所有的行都要被计算一遍,因此要效率提高的话,在这个表上建立一个基于函数的索引,比如CREATE INDEX IDX