当前位置: 首页 > news >正文

wordpress上一篇插件泰州seo外包公司

wordpress上一篇插件,泰州seo外包公司,wordpress隐藏统计图表,wordpress button插件索引简介 索引是数据库中一种快速查询数据的方法。索引中记录了表中的一列或多列值与其物理位置之间的对应关系,就好比一本书前面的目录,通过目录中页码就能快速定位到我们需要查询的内容。 建立索引的好处是加快对表中记录的查找或排序,但…

索引简介

索引是数据库中一种快速查询数据的方法。索引中记录了表中的一列或多列值与其物理位置之间的对应关系,就好比一本书前面的目录,通过目录中页码就能快速定位到我们需要查询的内容。

建立索引的好处是加快对表中记录的查找或排序,但建索引需要付出以下代价:

  • 增加了数据库的存储空间
  • 在插入和修改数据时要花费较多的时间,因为索引也要随之更新

除了加快查询的作用外,索引还有一些其他的用途,如唯一索引还可以起到唯一约束的作用。

索引的分类

PG中支持以下几类索引:

  • BTree:最常用的索引,BTree适用于处理等值查询和范围查询
  • HASH:只能处理简单的等值查询
  • GiST:不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略
  • SP-GiST:“Space-Partitioned GiST”的缩写,即空间分区GiST索引。
  • GIN:反转索引,可以处理包含多个健的值,如数组等,它支持用户定义的索引策略,可通过定义GIN索引的特定操作符类型实现不同的功能。PG的标准发布中包含了用于一维数组的GIN操作符类,比如,它支持包含操作符“@>”、被包含操作符“@<”、相等操作符“=”、重叠操作符“&&”等等

创建索引

CREATE [UNIQUE] INDEX [CONCURRENTLY] [name] ON table_name [USING method]
( { column_name | (expression)} [COLLATE collation] [opclass] [ASC | DESC] [ NULLS {FIRST | LAST}] [,...])
[WITH (storage_parameter = value [,...])]
[TABLESPACE tablespace_name]
[WHERE predicate]

一般,在创建索引的过程中会把表中的数据全部读一遍,该过程所用时间由表的大小决定,对于较大的表,可能会花费很久的时间。在创建索引的过程中,对表的查询可以正常运行,但对表的增、删、改等操作需要等索引建完后才能进行。对此PG提供了并发创建索引的方法。

假设由一张联系人的表,命令如下:

CREATE TABLE contacts(id int primary key,name varchar(40),phone varchar(32)[],address text
);

在该表中,由于一个人可能有多个电话号码,所以把“phone”定义为一个数组

为了实现按name快速查找,可以在字段name上建一个简单的BTree索引,命令如下:

CREATE INDEX idx_contacts_name on contacts(name);

如果像按电话号码phone字段快速查询,比如查询某个电话号码是谁的,由于此字段是一个数组,前面所建的BTree索引将不再起作用,这时可以建一个GIN索引,命令如下:

CREATE INDEX idx_contacts_phone on contacts using gin(phone);

如果想要查询号码“15873135680”是谁的,可以使用下面的查询语句:

SELECT * FROM contacts WHERE phone @> array['15873135680'::varchar(32)];

HASH索引的更新不会记录到WAL日志中,所以实际使用场景很少

创建索引可以指定存储参数“WITH(storage_paramter = value)”,常用的存储参数为FILLFACTOR,比如,可以这样创建索引:

CREATE INDEX idx_contacts_name on contacts(name) WITH (FILLFACTOR = 50);

也可以按降序创建索引:

CREATE INDEX idx_contacts_name on contacts(name desc);

如果字段name中有空值,则可以在创建索引时指定空值排在非空值前面:

CREATE INDEX idx_contacts_name on contacts(name desc NULLS FIRST);

也可以指定空值排在非空值后面:

CREATE INDEX idx_contacts_name on contacts(name desc NULLS LAST);

并发创建索引

通常情况下,在创建索引的时候PG会锁定表以防止写入,然后对表做全表扫描,从而完成创建索引的操作。在此过程中,其他用户仍然可以读取表,但是插入、更新、删除等操作将一直被阻塞,直到索引创建完毕

如果这张表示更新较频繁且比较大的表,那么创建索引可能需要几十分钟,甚至数个小时,这段时间内都不能做任何插入、删除、更新操作,这在大多数的在线数据库中都是不可接受的。

所以,PG支持在长时间阻塞更新的情况下建索引,通过在CREATE INDEX中加CONCURRENTLY选项来实现。

该选项PG会执行表的两次扫描,因此会需要更长的时间来建索引,但是它还是很有用的。

并发创建索引测试

image

create table jxx_test(id int primary key,note text);insert into jxx_test select generate_series(1,5000000),generate_series(1,5000000); 

同时开两个窗口,一个窗口执行创建索引,另一个窗口删除数据:
image
image

删除操作在创建完索引之后才会执行(图片上因为执行删除数据操作在创建索引发生之后才触发,有时间差)

继续同时开两个窗口,一个窗口执行创建索引(使用concurrently关键字),另一个窗口删除数:
image
image

创建索引时间虽然变长了,但是删除数据的操作不受阻塞,直接完成

并发重建索引

PG中,重建索引不支持CONCURRENTLY选项,但是PG中一个字段可以创建两个索引,所以并发重建索引可以执行以下步骤:

  1. 使用CONCURRENTLY选项建一个新的索引
  2. 删除旧索引

无效索引

创建索引过程需要注意,如果在创建索引过程中强行取消操作,会留下一个无效的索引:

  1. 仍然会导致更新速度变慢
  2. 如果是唯一索引,这个无效索引还会导致插入重复值失败

image
上述图片,可以通过shell窗口输入\d+table的命令查看。

需要手动删除该索引:

drop index idx_jxx_test_note;

修改索引

alter index idx_jxx_test_note rename to idx_jxx_test_note_new;

image

http://www.hkea.cn/news/146902/

相关文章:

  • 顺义专业建站公司最有效的线上推广方式
  • 大连网站网站搭建制作百度识图 上传图片
  • 给人做网站多少钱黑科技引流推广神器怎么下载
  • 沈阳做网站最好的公司百度快照怎么删除
  • 设置本机外网ip做网站网站免费制作平台
  • 有什么推荐做简历的网站2024的新闻有哪些
  • 申请做网站 论坛版主惠州seo外包服务
  • 网站照片上传不了域名解析ip
  • 胖小七网站建设2022最新国际新闻10条简短
  • wordpress 网站备份厦门seo外包服务
  • 网站建设及推广培训杭州百度快照优化排名
  • 简单手机网站开发软件关键词排名代发
  • visio画网站开发类图注册域名后怎么建网站
  • 道里网站运营培训北京网络营销咨询公司
  • 目前做网站流行的语言seo关键词排名优化哪家好
  • 长沙营销型网站制作费用seo图片优化
  • 学生诚信档案建设网站seo数据分析
  • 北京住房城乡建设厅网站首页1688官网入口
  • 网站建设需要懂什么软件徐州百度seo排名优化
  • wordpress网站样式网站排名查询
  • 郑州网站建设推销外贸网站推广与优化
  • 当当网站开发系统说明搜索引擎排名google
  • 国外男女直接做的视频网站企业邮箱登录入口
  • 成都可以做网站的公司百度手机助手最新版下载
  • 赤峰网站建设招聘市场营销互联网营销
  • 网站开发后端需要哪些技术友情链接检索数据分析
  • 金华竞价排名 金华企业网站建设常见的网络营销平台有哪些
  • p2p网站开发关键词seo是什么意思
  • 自己免费怎么制作网站合肥今天的最新消息
  • 今日头条新闻10条简短seo网络优化招聘信息