网站建站流程有哪些个人设计师的网站
2026/3/19 5:19:38 网站建设 项目流程
网站建站流程有哪些,个人设计师的网站,大连华南网站制作公司,360搜索关键词优化软件1. 索引创建基础语法PostgreSQL 默认使用 B-tree 索引#xff0c;通过 CREATE INDEX 命令创建#xff1b;其他索引类型需通过 USING 关键字显式指定#xff0c;通用语法如下#xff1a;-- 默认创建 B-tree 索引 CREATE INDEX 索引名 ON 表名 (列名); -- 创建指定类型的索引…1. 索引创建基础语法PostgreSQL 默认使用B-tree索引通过CREATE INDEX命令创建其他索引类型需通过USING关键字显式指定通用语法如下-- 默认创建 B-tree 索引 CREATE INDEX 索引名 ON 表名 (列名); -- 创建指定类型的索引 CREATE INDEX 索引名 ON 表名 USING 索引类型 (列名); -- 示例创建 Hash 索引 CREATE INDEX idx_user_id ON users USING HASH (user_id);2. 核心索引类型及实操样例2.1 B-tree 索引2.1.1 核心特性B-tree平衡树是 PostgreSQL 默认索引类型适用于可排序数据的等值、范围查询支持排序操作是最通用的索引类型。2.1.2 支持的操作符基础比较小于、小于等于、等于、大于等于、大于组合条件BETWEEN介于两值之间、IN匹配列表中任一值空值判断IS NULL为空、IS NOT NULL不为空模式匹配有限支持LIKE foo%模糊匹配以foo开头的字符串、~ ^foo正则匹配以foo开头的字符串ILIKE不区分大小写的模糊匹配、~*不区分大小写的正则匹配仅模式以非字母开头时生效2.1.3 实操样例步骤1创建测试表-- 创建用户表 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL, age INT, register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入测试数据 INSERT INTO users (username, age) VALUES (zhangsan, 25), (lisi, 30), (wangwu, 28), (zhaoliu, 35);步骤2创建 B-tree 索引-- 为 age 列创建 B-tree 索引默认类型可省略 USING BTREE CREATE INDEX idx_users_age ON users (age); -- 为 register_time 列创建 B-tree 索引支持范围/排序 CREATE INDEX idx_users_register_time ON users (register_time);步骤3索引生效的查询场景-- 等值查询命中 idx_users_age SELECT * FROM users WHERE age 30; -- 范围查询命中 idx_users_age SELECT * FROM users WHERE age BETWEEN 25 AND 30; -- 排序查询命中 idx_users_register_time SELECT * FROM users ORDER BY register_time DESC LIMIT 2; -- 模式匹配前缀匹配命中 idx_users_username CREATE INDEX idx_users_username ON users (username); SELECT * FROM users WHERE username LIKE zhang%;2.2 Hash 索引2.2.1 核心特性存储索引列的 32 位哈希值仅支持简单等值比较功能单一但等值查询效率高适用场景有限。2.2.2 支持的操作符仅等值判断2.2.3 实操样例步骤1创建 Hash 索引-- 为 username 列创建 Hash 索引仅支持等值 CREATE INDEX idx_users_username_hash ON users USING HASH (username);步骤2索引生效的查询场景-- 纯等值查询命中 Hash 索引 SELECT * FROM users WHERE username lisi; -- 注意以下场景 Hash 索引不生效会走全表扫描 SELECT * FROM users WHERE username LIKE li%; -- 范围/模糊查询不支持 SELECT * FROM users WHERE age 28; -- 未创建 Hash 索引的列2.3 GiST 索引2.3.1 核心特性GiSTGeneralized Search Tree并非单一索引而是通用索引框架可实现多种索引策略支持复杂数据类型如空间几何、全文检索和“最近邻”搜索。2.3.2 支持的操作符以二维几何类型为例空间关系左侧、重叠左侧、重叠右侧、右侧、|下侧、|重叠下侧、|重叠上侧、|上侧、包含、被包含、~相等、相交最近邻搜索-距离运算符用于按距离排序2.3.3 实操样例空间数据场景步骤1启用 PostGIS 扩展需先安装CREATE EXTENSION IF NOT EXISTS postgis;步骤2创建空间数据表并插入数据-- 创建地点表包含地理坐标 CREATE TABLE places ( id SERIAL PRIMARY KEY, name VARCHAR(100), location GEOGRAPHY(POINT) -- 地理坐标类型 ); -- 插入测试地点纬度、经度 INSERT INTO places (name, location) VALUES (公园, ST_SetSRID(ST_MakePoint(116.40, 39.90), 4326)), (商场, ST_SetSRID(ST_MakePoint(116.41, 39.91), 4326)), (学校, ST_SetSRID(ST_MakePoint(116.39, 39.89), 4326));步骤3创建 GiST 索引-- 为地理坐标列创建 GiST 索引 CREATE INDEX idx_places_location ON places USING GIST (location);步骤4索引生效的查询场景-- 1. 空间包含查询查找指定区域内的地点 SELECT * FROM places WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(116.40, 39.90), 4326), 1000); -- 1000 米范围内 -- 2. 最近邻搜索查找离指定坐标最近的 2 个地点 SELECT * FROM places ORDER BY location - ST_SetSRID(ST_MakePoint(116.40, 39.90), 4326) LIMIT 2;2.4 SP-GiST 索引2.4.1 核心特性SP-GiSTSpace-Partitioned Generalized Search Tree是另一种通用索引框架支持非平衡磁盘数据结构四叉树、k-d 树、基数树等适配空间分区类查询轻量化高效。2.4.2 支持的操作符以二维点类型为例空间关系左侧、右侧、~相等、被包含、|下侧、|上侧最近邻搜索支持依赖具体操作符类常用-距离运算符2.4.3 实操样例二维点数据步骤1创建二维点表并插入数据-- 创建二维点表 CREATE TABLE points ( id SERIAL PRIMARY KEY, pos POINT -- 二维点类型 ); -- 插入测试数据 INSERT INTO points (pos) VALUES ((1,2)), ((3,4)), ((5,6)), ((7,8));步骤2创建 SP-GiST 索引-- 为 pos 列创建 SP-GiST 索引 CREATE INDEX idx_points_pos ON points USING SP-GiST (pos);步骤3索引生效的查询场景-- 1. 空间范围查询查找 x 轴小于 5 的点 SELECT * FROM points WHERE pos (5,5); -- 表示左侧x 更小 -- 2. 最近邻搜索查找离 (4,4) 最近的点 SELECT * FROM points ORDER BY pos - (4,4) LIMIT 1;2.5 GIN 索引2.5.1 核心特性GINGeneralized Inverted Index倒排索引专为多值数据类型设计为每个组成值建立独立索引项高效支持“包含/存在”类查询是数组、JSONB、全文检索的首选索引。2.5.2 支持的操作符以数组类型为例包含/存在被包含如数组A 数组B表示A是B的子集、包含如数组A 数组B表示B是A的子集、相等、相交两数组有共同元素2.5.3 实操样例数组/JSONB 场景场景1数组查询-- 1. 创建带数组列的表 CREATE TABLE articles ( id SERIAL PRIMARY KEY, title VARCHAR(100), tags TEXT[] -- 标签数组 ); -- 2. 插入测试数据 INSERT INTO articles (title, tags) VALUES (PostgreSQL 索引, ARRAY[postgres, 数据库, 索引]), (Python 教程, ARRAY[python, 编程, 教程]), (GIS 空间分析, ARRAY[gis, postgres, 空间数据]); -- 3. 创建 GIN 索引 CREATE INDEX idx_articles_tags ON articles USING GIN (tags); -- 4. 索引生效的查询包含指定标签 SELECT * FROM articles WHERE tags ARRAY[postgres]; -- 包含 postgres 标签 SELECT * FROM articles WHERE tags ARRAY[数据库, 编程]; -- 交集包含任一场景2JSONB 查询-- 1. 创建带 JSONB 列的表 CREATE TABLE products ( id SERIAL PRIMARY KEY, info JSONB -- 产品信息JSONB 类型 ); -- 2. 插入测试数据 INSERT INTO products (info) VALUES ({name: 手机, price: 2999, tags: [数码, 通讯]}), ({name: 电脑, price: 5999, tags: [数码, 办公]}); -- 3. 创建 GIN 索引 CREATE INDEX idx_products_info ON products USING GIN (info); -- 4. 索引生效的查询JSONB 包含键/值 SELECT * FROM products WHERE info {tags: [数码]}; -- 包含数码标签 SELECT * FROM products WHERE info - name 手机; -- 等值查询需结合操作符2.6 BRIN 索引2.6.1 核心特性BRINBlock Range Index块范围索引存储表物理块范围的值摘要信息最小值/最大值占用空间极小适配大数据量且物理顺序与逻辑顺序高度相关的场景如时序日志表。2.6.2 支持的操作符线性排序类型基础比较小于、小于等于、等于、大于等于、大于2.6.3 实操样例时序日志表步骤1创建日志表并插入有序数据-- 创建访问日志表按时间有序插入 CREATE TABLE access_logs ( id SERIAL, user_id INT, access_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ip VARCHAR(20) ); -- 插入 10 万条测试数据模拟时间有序的日志 INSERT INTO access_logs (user_id, ip) SELECT floor(random() * 1000)::INT, 192.168. || floor(random() * 255)::INT || . || floor(random() * 255)::INT FROM generate_series(1, 100000);步骤2创建 BRIN 索引-- 为 access_time 列创建 BRIN 索引物理有序效率高 CREATE INDEX idx_access_logs_time ON access_logs USING BRIN (access_time);步骤3索引生效的查询场景-- 范围查询命中 BRIN 索引快速定位块范围 SELECT COUNT(*) FROM access_logs WHERE access_time BETWEEN 2026-01-01 00:00:00 AND 2026-01-01 12:00:00; -- 注意若数据物理无序BRIN 索引会失效优先选 B-tree2.7 扩展索引Bloom2.7.1 核心特性Bloom 是 PostgreSQL 扩展提供的索引类型基于布隆过滤器实现适用于多列等值查询可大幅减少多列组合索引的存储空间但存在假阳性需回表验证。2.7.2 实操样例步骤1启用 bloom 扩展CREATE EXTENSION IF NOT EXISTS bloom;步骤2创建 Bloom 索引-- 为 user_id 和 ip 多列创建 Bloom 索引 CREATE INDEX idx_access_logs_bloom ON access_logs USING bloom (user_id, ip) WITH (length80, col12, col24); -- length索引长度colN各列的位数步骤3索引生效的查询场景-- 多列等值查询命中 Bloom 索引 SELECT * FROM access_logs WHERE user_id 100 AND ip 192.168.10.20;2.7.3 Bloom 索引 vs 传统多列组合索引B-tree在多列等值查询场景中Bloom 索引和 B-tree 组合索引是两种常见方案但设计理念、性能、适用场景差异显著以下是详细对比1. 核心原理差异维度Bloom 索引B-tree 组合索引存储结构基于布隆过滤器存储列的哈希值位图不存储原始数据基于平衡树按列的组合顺序存储原始值如 (col1, col2)存储空间极小MB 级仅存储哈希位图与表行数无关较大GB 级需存储所有列的原始值随行数线性增长索引精度存在假阳性可能匹配到不存在的数据需回表验证精准匹配无假阳性2. 支持的查询场景查询类型Bloom 索引B-tree 组合索引多列全等值查询支持如col1 ? AND col2 ?支持且精准前缀列查询不支持如仅查col1 ?无法使用支持组合索引的核心优势如 (col1, col2) 支持仅查 col1范围查询不支持仅等值支持如col1 ? AND col2 ?排序/分组不支持支持按组合列排序3. 实操对比样例access_logs前提复用前文 表10 万条数据-- 场景1创建 B-tree 组合索引col1user_id, col2ip CREATE INDEX idx_access_logs_btree ON access_logs (user_id, ip); -- 场景2创建 Bloom 索引 CREATE INDEX idx_access_logs_bloom ON access_logs USING bloom (user_id, ip) WITH (length80, col12, col24); -- 对比1多列全等值查询 -- Bloom 索引生效需回表验证假阳性 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100 AND ip 192.168.10.20; -- B-tree 组合索引生效精准匹配无需回表 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100 AND ip 192.168.10.20; -- 对比2仅前缀列查询Bloom 失效B-tree 生效 -- Bloom 索引不生效仅查 user_id走全表扫描 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100; -- B-tree 组合索引生效前缀列匹配 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100; -- 对比3范围查询Bloom 失效B-tree 生效 -- Bloom 索引不生效ip 用范围 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100 AND ip LIKE 192.168.10.%; -- B-tree 组合索引生效前缀列等值 后缀列范围 EXPLAIN ANALYZE SELECT * FROM access_logs WHERE user_id 100 AND ip LIKE 192.168.10.%;4. 适用场景选择选 Bloom 索引选 B-tree 组合索引多列全等值查询为主需要支持前缀列查询、范围查询、排序表数据量极大千万/亿级追求极小存储成本数据量中等追求查询精准度和多功能性可接受少量假阳性回表验证的性能损耗对查询精度要求高不接受假阳性多列无明显“前缀优先级”无单列表查询有明确的前缀列查询需求如仅查 user_id3. 索引类型选择速查表索引类型核心优势典型适用场景核心样例语句备注B-tree通用、支持排序/范围常规等值/范围查询CREATE INDEX idx ON tbl (col);默认选择覆盖 80% 场景Hash等值查询效率高纯等值查询CREATE INDEX idx ON tbl USING HASH (col);功能单一适用场景有限GiST复杂数据、最近邻空间数据、全文检索CREATE INDEX idx ON tbl USING GIST (geo_col);需配合扩展如 PostGISSP-GiST空间分区、轻量化二维点/多维数据CREATE INDEX idx ON tbl USING SP-GiST (pos_col);非平衡结构适配分区查询GIN多值数据、倒排索引数组、JSONB、全文检索CREATE INDEX idx ON tbl USING GIN (array_col);多值数据首选索引BRIN低存储、大数据量有序表日志表、时序数据CREATE INDEX idx ON tbl USING BRIN (time_col);仅适用于数据物理有序场景Bloom多列等值、低存储多列组合等值查询无前缀/范围需求CREATE INDEX idx ON tbl USING bloom (col1, col2);对比 B-tree 组合索引存储小但功能单一有假阳性4. 总结优先选 B-tree无特殊需求时B-tree 可覆盖 80% 以上的常规查询场景是默认且最通用的选择。专用场景选专用索引处理空间数据用 GiST/SP-GiST多值数据数组/JSONB用 GIN大数据量有序表用 BRIN。多列查询选对索引需支持前缀列、范围查询 → 选 B-tree 组合索引仅多列全等值查询、追求低存储 → 选 Bloom 索引接受假阳性。样例可直接复用文档中所有 SQL 样例均基于 PostgreSQL 14 编写启用扩展如 postgis、bloom后可直接执行便于快速验证索引效果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询