psql-09表:视图和索引
视图
由查询语句定义的虚拟表;从视图中看到的数据可能来自数据库中的一张或多张表,也可能来自外部;
使用视图的原因一般有:
* 使复制的查询易于理解和使用;
* 安全原因;
* 表一些函数返回的结果映射成视图;一般数据库提供的视图是只读的;
创建视图
create table users(
id int,
user_name varchar(40),
password varchar(40),
user_email text,
user_mark text
);
//创建视图过滤掉password字段;
create [temp] view vw_users as select id, user_name, user_email, user_mark from users;
//然后像查询表一样查询视图
//视图也可以为查询的各列重命名;
create view rename_users(no, name, email, mark)
as select id, user_name, user_email, user_mark from users;
可更新视图
Postgresql9.3开始支持直接在视图上进行insert,delete,update等操作;
删除视图
drop view vn_name;
索引
- 索引是数据库中一种快速查询数据的方法,索引中记录了表中一列或多列的值与其物理位置之间的对应关系;
- 建立索引加快了对表中记录的查找或排序;但同时索引也有代价:
* 增加了数据库的存储空间;
* 在插入和修改数据时要花费较多的时间,因为索引也要随之更新;
索引分类
B-tree: 最常用(默认开启)的索引,适合处理等值查询和范围查询;
<
<=
=
>=
>
R-tree: 特別适合于空间资料;
<<
&<
&>
>>
@
~=
&&
Hash: 只能处理简单的等值查询;GiST: 不是一种单独的索引类型,而是一种架构,可以在架构上实现很多不同的索引策略;SP-GiST: 空间分区GiST索引,主要是通过一些新的缩索引算法提高GiST索引在某个情况下的性能;GIN: 反转索引,可以处理包含很多个键的值,如数组等;与GiST类似,GIN支持用户定义的索引策略;
创建索引
//创建一个通信信息的表,电话号码为数组类型
create table contacts(
id int primary key,
name varchar(40),
phone varchar(32)[],
address text
);
//创建B-tree索引
create index idx_contacts_name on contacts (name);
//如果想要按照电话号码查找,可以使用gin索引
create index idx_contacts_phone on contacts using gin(phone);
select * from contacts where phone @> array['xxx'::varchar(32)]; //@>是数组操作符,表示包含;
- 指定存储参数
create ubdex idx_contacts_name on contacts(name) width(fillfactor=50);
- 升/降序
create index idx_contacts_name on contacts(name [desc|asc]);
//指定非控制排前面/后面
create index idx_contacts_name on contacts(name [desc|asc] nulls [first|last]);
并发创建索引
- 通常在创建索引时
PostgreSQL会锁定表,直到索引创建完毕,仅可以读取表而不能进行其他操作; PostgreSQL支持不长时间阻塞更新情况下创建索引;此时PostgreSQL会执行表的两次扫描,因此该方法需要更长的时间创建索引;
create index concurrently idx_contacts_name on contacts(name); //使用concurrently
并发创建索引的时如果创建过程被强行取消,可能会留下一个无效的索引,这个索引仍然会导致更新变慢;
* 如果创建的是一个唯一索引,这个无效索引还会导致插入重复值失败;索引填充因子: 定义该索引每页上的可用空间量,适应以后表数据的扩展并减小了页拆分的可能性,从 1 到 100 之间的某个值,指定索引页保留为空的百分比;
修改索引
- 索引改名:
alter index idx_contacts_name rename to idx_contacts_name_new;
- 索引移动表空间
alter index idx_contacts_name set tablespace tb_test;
- 设置索引填充因子
alter index idx_contacts_name set (fillfactor = 75);
- 把索引的填充因子设置为默认值
alter index idx_contacts_name reset (fillfactor);
- 查看索引信息
\d+ idx_contacts_name
删除索引
drop index [if exists] name [cascade | restricr]
psql-09表:视图和索引的更多相关文章
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
0.表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user ...
- IOS之表视图添加索引
我们要实现的效果如下. 1.修改ControlView.h,即添加变量dict,用于存储TabelView的数据源. #import <UIKit/UIKit.h> @interface ...
- IOS开发之表视图添加索引
我们要实现的效果如下. 1.修改ControlView.h,即添加变量dict,用于存储TabelView的数据源. #import <UIKit/UIKit.h> @interface ...
- iOS企业级开发初级课程-表视图(13集)
首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...
- 表视图控制器(TableViewController)(三) 、 表视图搜索
1 乐库的设置界面 1.1 问题 tableView分为静态(static)和动态(dynamic),之前使用的都是动态的tableView,表视图的有多少分区.有多少行以及每一行显示的内容都不是固定 ...
- 查看Oracle当前用户下的(表视图,同义词...)
查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件) 0.表空间 SQL>select username,default_tablespace from ...
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06| 分类: SQL SERVER|举报|字号 订阅 ( ...
- 数据库T-SQL语言操作(T-SQL语句、数据库、表、视图、索引)
T-SQL语言 按用途分四部分 数据定义语言(CREATE,DROP,ALTER) 数据操作语言(INSERT,DELETE,UPDATE) 数据查询语言(SELECT) 数据控制语言(GRANT,R ...
- iOS开发高级分享 - iOS的可折叠表视图
导言 我曾经开发过一个iphone应用程序,它显示了大量的输入,这些输入分为不同的类别,在`UITableView`...若要更改其中一个输入的值,用户按下表视图中的对应行,并在出现的单独屏幕中更改该 ...
随机推荐
- Protobuf for Python测试保存和读取文件
安装pip, setuptools, and wheel 如果已经从python.org,安装啦Python 2 >=2.7.9 or Python 3 >=3.4 ,那么就已经有啦pip ...
- jedis池的作用
一.jedis池的介绍 相信大家都用过线程池或者是jdbc的连接池,使用池可以减少系统在使用所需对象时创建对象的开销,从而提高系统性能和效率.jedis池也是如此,那么我们该如何使用jedis池呢? ...
- java List 和Map的使用
一.MAP package net.xsoftlab.baike; import java.util.HashMap;import java.util.Iterator;import java.uti ...
- 20145212&20145204信息安全系统实验五
一.实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/07_httpd目录,使用 vim编辑器或其他编辑器阅读理解源代码. 2.编译应用程序 运行 make 产生可执行文件 h ...
- 理清Java中的编码解码转换
1.字符集及编码方式 概括:字符编码方式及大端小端 详细:彻底理解字符编码 可以通过Charset.availableCharsets()获取Java支持的字符集,以JDK8为例,得到其支持的字符集: ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得前两篇文章吗.主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方式各有利 ...
- MySQL提示:The server quit without updating PID file问题的解决办法(转载)
MySQL提示:The server quit without updating PID file问题的解决办法 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写 ...
- 编译安装 Zend Opcache 缓存Opcache,加速 PHP
Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具.现在,Zend 科技公司将 Optimizer+ 在 PHP Lice ...
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- java23
1:多线程(理解) (1)多线程:一个应用程序有多条执行路径 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行 ...