前提:A表的字段a1有索引
SQL:select * from B where B.a1 in (select C.a1 as a1 from C)
这个时候由于select C.a1 as a1 from C返回的是记录集,因此索引利用不上。
把上面的SQL改变写法如下:
select * from B where B.a1 = any (array(select C.a1 as a1 from C))
这样改写后就能够利用索引了。
为什么能利用索引呢? 一般的认识是 in,any的内容如果是记录集的话,索引就利用不上。如果是数组,字符串的话,就能够利用索引。
数据库表的数据量特别大的时候,检索条件用了索引和没有用索引差别相当大。几倍到几百倍不等。能不能用到索引是根据数据库的实施计划来决定的。 我们以in为例 前提:A表的字段a1有索引 SQL:select * from B where B.a1 in (select C.a1 as a1 from C) 这个时候由于select C.a1 as a1 fr
一、
索引
的类型:
Post
gre
SQL
提供了多种
索引
类型:B-Tree、R-Tree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种
索引
类型都有其适合的查询类型,缺省时,CREATE INDEX命令将创建B-Tree
索引
。
1. B-Tree:
CREATE TABLE test1 (
id integer,
在
SQL
中我们可以使用in、exists语句来判断对象是否存在某个子查询中,在pg中除了支持这两种语法,还支持= any的语法,例如下面三个
SQL
的意思就是一样的:
select * from tbl where id in (select id from t);
select * from tbl where exists (select 1 from t where t.id=tbl...
一、
索引
的类型:
Post
gre
SQL
提供了多 种
索引
类型:B-Tree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种
索引
类型都有其适合的查询类型,缺省时,CREATE INDEX命令将创建B-Tree
索引
。
1. B-Tree:
CREATE TABLE test1 (
id integer,
content varchar
); CREATE INDEXtest1_id_indexONtest1 (...
作者:阎书利
索引
其实就是一种数据结构,将
数据库
中的数据以一定的数据结构算法进行存储。当表数据量越来越大时查询速度会下降,建立合适的
索引
能够帮助我们快速的检索
数据库
中的数据,快速定位到可能满足条件的记录,不需要遍历所有记录。
索引
自身也占用存储空间、消耗计算资源,创建过多的
索引
将对
数据库
性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建
索引
)。因此,仅在必要时创建
索引
。
post
gre
sql
里的所有
索引
都是“从属
索引
”,也就是
索引
在物理上与它描述的表文件分离。
索引
是一种
数据库
对象,每个
索引
在pg_
1. create table
post
gres=# create table tb5 (id integer,age integer);
CREATE TABLE
post
gres=# \d tb5
Table "public.tb5"
Column | Type | Modifiers
--------+---------+-----------
id | in
1. 登录到
Post
gre
SQL
服务器
使用p
sql
命令以
Post
gre
SQL
管理员用户身份登录到服务器上。例如,可以使用以下命令登录到默认的
post
gres
数据库
:
p
sql
-U
post
gres
2. 创建新
数据库
使用CREATE DATABASE命令创建一个新的
数据库
。在命令后面指定新
数据库
的名称。例如,要创建一个名为mydatabase的
数据库
,可以执行以下命令:
CREATE DATABASE mydatabase;
3. 授权访问
默认情况下,只有创建
数据库
的用户可以访问它。要授权其他用户访问
数据库
,请使用GRANT命令。例如,要授权名为myuser的用户访问mydatabase
数据库
,可以执行以下命令:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
这将授予myuser用户对mydatabase
数据库
的所有权限。
完成以上步骤后,你就成功创建了一个
Post
gre
SQL
数据库
。