网站建设小说建站模板源码
2026/4/3 22:02:42 网站建设 项目流程
网站建设小说,建站模板源码,平台设计方案怎么做,ui设计主要做什么引言 掌握表的基本运作之后#xff0c;若想优化查询效率并简化数据访问#xff0c;就要去学习“索引”和“视图”的运用#xff0c;索引类似于“书籍目录”#xff0c;可以极大地加快查询速度#xff1b;视图类似“数据窗口”#xff0c;能够隐藏复杂的查询逻辑#xf…引言掌握表的基本运作之后若想优化查询效率并简化数据访问就要去学习“索引”和“视图”的运用索引类似于“书籍目录”可以极大地加快查询速度视图类似“数据窗口”能够隐藏复杂的查询逻辑还能控制数据的可见性。本文就“ksql命令行操作索引与视图”展开论述把从“作用到创建再到查看维持直至删除”的全过程拆解成实际操作步骤并结合例子和避坑提示以使初学者能够领悟并付诸实行。文章目录引言一、前置准备确认操作基础衔接前文确保连贯1.1 1. 连接数据库并切换目标模式1.2 2. 插入测试数据用于验证索引 / 视图效果二、索引管理给表 “加目录”加速查询2.1 1. 先懂基础索引的类型与适用场景2.2 2. 创建索引用 CREATE INDEX 语句2.2.1 示例 1创建普通索引加速单字段查询2.2.2 示例 2创建唯一索引确保字段唯一 加速查询2.2.3 示例 3创建复合索引加速多字段组合查询2.3 3. 查看索引确认索引存在与关联表2.3.1 示例 1查看所有索引\di 命令2.3.2 示例 2查看表关联的索引\dt 表名2.4 4. 索引维护优化性能与调整结构2.4.1 示例 1重建索引解决碎片化提升查询速度2.4.2 示例 2重命名索引规范命名2.4.3 示例 3删除索引无用索引清理2.5 5. 索引使用注意事项新手避坑指南三、视图管理给数据 “开窗口”简化查询与控制权限3.1 1. 先懂基础视图的核心作用新手必知3.2 2. 创建视图用 CREATE VIEW 语句3.2.1 示例 1基础视图简化单表查询3.2.2 示例 2进阶视图带筛选条件的复杂查询3.2.3 示例 3只读视图禁止修改数据3.3 3. 查看视图确认视图定义与关联表3.3.1 示例 1查看所有视图\dv 命令3.3.2 示例 2查看视图定义\d 视图名3.4 4. 视图操作查询、修改与删除3.4.1 示例 1查询视图数据与表查询一致3.4.2 示例 2修改视图定义CREATE OR REPLACE3.4.3 示例 3删除视图DROP VIEW3.5 5. 视图使用注意事项新手避坑指南四、常见问题排查索引与视图的高频报错问题 1创建索引报错 “重复的键名”问题 2查询视图报错 “关系对象不存在”问题 3通过视图修改数据报错 “无法更新只读视图”五、总结索引与视图的配合使用一、前置准备确认操作基础衔接前文确保连贯索引和视图要依托已有的表所以得先做好如下预备工作参照第四篇“表的运作”相关内容以防止在操作过程中因为依赖缺失而出现错误提示。1.1 1. 连接数据库并切换目标模式利用 ksql 建立与本地 KingbaseES 数据库的联系转到先前所创建的test_schema模式当中检查目标表是否确实存在拿sys_user表来说要是没有就再次创建它或者用一个新的例子这样做的目的是确保后续操作能够顺利执行。-- 1. 连接数据库若未连接ksql-d kingbase-U system-- 2. 切换到 test_schema 模式SETsearch_pathTOtest_schema,public;-- 3. 确认目标表存在如 sys_user 表\dt sys_user;-- 若不存在创建示例表用于后续索引/视图操作CREATETABLEIFNOTEXISTSsys_user(idSERIALPRIMARYKEY,nameVARCHAR(100)NOTNULL,phoneCHAR(11)UNIQUENOTNULL,emailVARCHAR(100)UNIQUENOTNULL,create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP)TABLESPACEtest_ts;执行后若显示Table test_schema.sys_user does not exist则先执行上述CREATE TABLE语句创建表确保后续操作有载体。1.2 2. 插入测试数据用于验证索引 / 视图效果为了后续可以检测索引的查询速度并查看视图的数据展示情况要给sys_user表增添大量模拟数据来做测试能够添加上千条记录以模拟真实场景。-- 批量插入10条测试数据可复制扩展INSERTINTOtest_schema.sys_user(name,phone,email)VALUES(张三,13800138000,zhangsantest.com),(李四,13900139000,lisitest.com),(王五,13700137000,wangwutest.com),(赵六,13600136000,zhaoliutest.com),(孙七,13500135000,sunqitest.com),(周八,13400134000,zhoubatest.com),(吴九,13300133000,wuj iutest.com),(郑十,13200132000,zhengshitest.com),(钱一,13100131000,qianyitest.com),(冯二,1300130000,fengertest.com);执行后提示INSERT 0 10表示数据插入成功为后续操作提供测试基础。二、索引管理给表 “加目录”加速查询索引是 KingbaseES 优化查询性能的核心手段 —— 当表数据量较大时如 10 万条 无索引的查询会 “全表扫描”逐行查找而有索引的查询会通过 “索引目录” 直接定位数据速度提升成百上千倍。接下来我们按 “创建→查看→维护→删除” 展开讲解2.1 1. 先懂基础索引的类型与适用场景新手需先明确不同索引的作用避免盲目创建索引并非越多越好会增加更新 / 插入的开销2.2 2. 创建索引用 CREATE INDEX 语句2.2.1 示例 1创建普通索引加速单字段查询给sys_user表的phone列建普通索引频繁按手机号查用户时用-- 语法CREATE INDEX 索引名 ON 表名(字段名);CREATEINDEXidx_sys_user_phoneONtest_schema.sys_user(phone);索引名规范提议采用“idx_表名_字段名”格式这样便于识别比如“idx_sys_user_phone”就表示“sys_user”表中“phone”列的索引。成功验证执行后提示CREATE INDEX表示索引创建成功。2.2.2 示例 2创建唯一索引确保字段唯一 加速查询给sys_user表的email列建唯一索引既确保邮箱不重复又加速邮箱查询-- 语法CREATE UNIQUE INDEX 索引名 ON 表名(字段名);CREATEUNIQUEINDEXidx_sys_user_emailONtest_schema.sys_user(email);与 UNIQUE 约束的区别唯一索引只保证值唯一UNIQUE 约束包含约束和唯一索引如果表已有email的 UNIQUE 约束则不必再创建email的唯一索引因为约束本身就会生成索引。2.2.3 示例 3创建复合索引加速多字段组合查询为sys_user表的name和create_time列创建复合索引当经常依照“姓名创建时间范围”执行查询的时候会用到这个索引。-- 语法CREATE INDEX 索引名 ON 表名(字段1, 字段2);CREATEINDEXidx_sys_user_name_createtimeONtest_schema.sys_user(name,create_time);字段顺序注意复合索引依照“最左符合原则”索引(name, create - time)可加强 name 单字段查询也可加强 name create - time 综合查询但无法加强 create - time 单字段查询要按照查询习惯来确定字段顺序。2.3 3. 查看索引确认索引存在与关联表创建索引后需通过 ksql 命令查看索引列表、关联表及详情推荐\di和\dt命令2.3.1 示例 1查看所有索引\di 命令执行\di可列出当前模式下的所有索引确认索引是否创建成功\di执行结果示例关键信息解读Table索引关联的表确认是sys_userColumns索引对应的字段单字段 / 多字段sys_user_pkey主键自动创建的索引无需手动创建。2.3.2 示例 2查看表关联的索引\dt 表名若需查看某张表的所有索引如sys_user执行\d 表名\dtest_schema.sys_user执行结果示例索引部分直接展示表关联的所有索引包括类型PRIMARY KEY/UNIQUE/ 普通和字段清晰直观。2.4 4. 索引维护优化性能与调整结构索引经过一定时间的使用之后有可能会出现由于数据频繁被删除或者更新而造成的“碎片化”现象即索引文件中存在许多空白空间这种情况下要借助重建索引来改善这种情况而且按照个人需求也可以重新命名或者直接删除索引。2.4.1 示例 1重建索引解决碎片化提升查询速度当索引查询速度变慢时重建索引可整理碎片恢复性能表大时建议离线执行避免影响业务-- 语法REINDEX INDEX 索引名;REINDEXINDEXidx_sys_user_phone;-- 进阶重建表的所有索引更高效REINDEXTABLEsys_user;成功验证执行后提示REINDEX表示重建完成。2.4.2 示例 2重命名索引规范命名索引名若不符合规范可以重新命名可以把idx_sys_user_phone改为idx_sys_user_mobile。-- 语法ALTER INDEX 旧索引名 RENAME TO 新索引名;ALTERINDEXidx_sys_user_phoneRENAMETOidx_sys_user_mobile;验证执行\d test_schema.sys_user可看到索引名已更新。2.4.3 示例 3删除索引无用索引清理某字段查询频率降低或者索引致使插入/更新变慢的时候要删除无用索引要注意的是主键索引以及与唯一约束相关联的索引不能直接删应当先删约束。-- 语法DROP INDEX IF EXISTS 索引名;DROPINDEXIFEXISTSidx_sys_user_name_createtime;IF EXISTS避免索引不存在时报错仅提示警告验证执行\d test_schema.sys_user确认索引已移除。2.5 5. 索引使用注意事项新手避坑指南索引并非越多越好索引会加重插入更新和删除时的开销因为每当数据发生变动的时候都要同步更新索引。所以一张表的索引最好别超过5个。小表不需要创建索引当数据量小于1万条时全表扫描比索引查询速度更快因为索引查询要先查找索引再查找数据这就多了一次IO操作。列如果经常更新就不要创建索引比如“订单状态”这个字段其值每秒都在变给它创建索引之后索引就会频繁地执行同步操作从而影响到整体的性能表现。要避开对函数执行索引字段像WHERE SUBSTR(phone,1,3) 138这种情况会使索引失效应该改成WHERE phone LIKE 138%前缀符合能够利用索引。三、视图管理给数据 “开窗口”简化查询与控制权限视图属于“虚拟表”它依靠SQL查询结果生成并未储存实际数据数据仍旧保存在原始表当中其关键意义在于“隐匿复杂查询逻辑”以及“调控数据可见范围”譬如仅仅向用户显示某些列我们按照“创建 - 查看 - 操作 - 删除”的顺序来执行。3.1 1. 先懂基础视图的核心作用新手必知新手容易混淆 “表” 和 “视图”用通俗比喻理解表“仓库”存储实际数据视图名为“仓库窗口”此视图仅显示指定区域的货物数据无法看到整个仓库的概貌而且该窗口不可直接被修改要经过此窗口去更改仓库的数据不过存在一些限制。视图的核心场景简化复杂查询多表关联查询JOIN可以被封装成视图之后的查询直接针对该视图展开不必再次书写复杂的 SQL 语句。数据权限控制方面可以向普通用户展示sys_user表中name和phone字段的内容而将email这类敏感信息遮盖起来这要依靠视图来达成。数据一致性多系统共用同一查询逻辑时视图可确保所有系统使用相同的筛选条件。3.2 2. 创建视图用 CREATE VIEW 语句3.2.1 示例 1基础视图简化单表查询创建 “用户基础信息视图vw_sys_user_basic”只包含id、name、phone列隐藏email敏感信息-- 语法CREATE VIEW 视图名 AS SELECT 语句;CREATEVIEWvw_sys_user_basicASSELECTid,name,phoneFROMtest_schema.sys_user;成功验证执行后提示CREATE VIEW表示视图创建成功。3.2.2 示例 2进阶视图带筛选条件的复杂查询创建 “2024 年创建的用户视图vw_sys_user_2024”筛选create_time在 2024 年的用户包含name、email、create_time列CREATEVIEWvw_sys_user_2024ASSELECTname,email,create_timeFROMtest_schema.sys_userWHEREcreate_time2024-01-01 00:00:00ANDcreate_time2025-01-01 00:00:00;动态性视图数据会随原表变化自动更新如原表新增 2024 年用户视图会自动包含该数据。3.2.3 示例 3只读视图禁止修改数据若需确保视图数据不被修改如报表视图可添加WITH READ ONLY选项CREATEVIEWvw_sys_user_reportASSELECTname,phone,create_timeFROMtest_schema.sys_userWITHREADONLY;效果后续若尝试通过视图修改数据如UPDATE vw_sys_user_report SET name张三会报错 “cannot update a read-only view”。3.3 3. 查看视图确认视图定义与关联表创建视图之后要利用 ksql 命令来查看视图列表定义以及相关联的表建议使用\dv和\d这两个命令。3.3.1 示例 1查看所有视图\dv 命令执行\dv可列出当前模式下的所有视图确认视图是否创建成功执行结果示例3.3.2 示例 2查看视图定义\d 视图名若需确认视图的底层 SQL如忘记视图筛选条件执行\d 视图名\dvw_sys_user_2024执行结果示例定义部分直接展示视图的完整 SQL 定义便于后续修改或验证逻辑。3.4 4. 视图操作查询、修改与删除视图的核心操作是 “查询”修改和删除需遵循特定规则3.4.1 示例 1查询视图数据与表查询一致查询视图数据的语法和查询表完全相同无需额外学习-- 查询基础视图数据SELECT*FROMvw_sys_user_basic;-- 查询2024年用户视图按创建时间排序SELECT*FROMvw_sys_user_2024ORDERBYcreate_timeDESC;效果返回结果与查询原表筛选后的数据一致但看不到隐藏的列如email在vw_sys_user_basic中不可见。3.4.2 示例 2修改视图定义CREATE OR REPLACE若需调整视图的筛选条件或列如vw_sys_user_2024改为包含 2023 年数据无需删除视图直接用CREATE OR REPLACE修改CREATEORREPLACEVIEWvw_sys_user_2024ASSELECTname,email,create_timeFROMtest_schema.sys_userWHEREcreate_time2023-01-01 00:00:00ANDcreate_time2025-01-01 00:00:00;验证执行\d vw_sys_user_2024确认定义已更新。3.4.3 示例 3删除视图DROP VIEW当视图不再使用时执行删除命令删除视图不影响原表数据仅删除视图定义-- 语法DROP VIEW IF EXISTS 视图名;DROPVIEWIFEXISTSvw_sys_user_report;验证执行\dv确认视图已移除。3.5 5. 视图使用注意事项新手避坑指南视图修改限制含以下情况的视图无法修改数据即使未加READ ONLY视图涵盖DISTINCT去重GROUP BY分组HAVING筛选分组。视图包含聚合函数如COUNT、SUM视图来自多表关联JOIN原表删除影响若原表比如sys_user表被删除则该视图就会成为“无效视图”在执行查询的时候会收到“relation does not exist”的错误提示。性能注意复杂视图包含多表关联或者聚合情况时其查询效率依靠原表索引所以要保证原表中相关联的字段已有索引比如在多表JOIN操作里涉及的关联列就需要事先创建好索引。四、常见问题排查索引与视图的高频报错问题 1创建索引报错 “重复的键名”报错信息ERROR: duplicate key name idx_sys_user_phone原因同名索引已存在如之前已创建idx_sys_user_phone。解决方案执行\di查看索引名确认是否重复若需重新建索引先删除旧索引DROP INDEX idx_sys_user_phone;再创建新索引。问题 2查询视图报错 “关系对象不存在”报错信息ERROR: relation vw_sys_user_basic does not exist原因视图名拼写错误如vw_sys_user_basci视图所在模式不在搜索路径中如视图在test_schema但当前搜索路径是public。解决方案检查视图名拼写执行\dv确认正确名称切换到视图所在模式SET search_path TO test_schema, public;或用 “模式名。视图名” 全称查询SELECT * FROM test_schema.vw_sys_user_basic;。问题 3通过视图修改数据报错 “无法更新只读视图”报错信息ERROR: cannot update a read-only view vw_sys_user_report原因视图创建时加了WITH READ ONLY选项禁止修改。解决方案若需允许修改重新创建视图去掉WITH READ ONLYCREATEORREPLACEVIEWvw_sys_user_reportASSELECTname,phone,create_timeFROMsys_user;注意重新创建前需确认视图无修改限制如不含GROUP BY、聚合函数等。五、总结索引与视图的配合使用本文完整覆盖了索引和视图的核心操作核心要点可总结为1.管理“查询速度”时依照查询场景来挑选普通/唯一/复合索引不要过度创建要定时执行重建并改善性能。2.视图管 “查询简化与权限”封装复杂逻辑、隐藏敏感数据注意修改限制和原表依赖3.配合使用视图的查询速度与原表索引相关给vw_sys_user_2024视图对应的sys_user原表创建create - time索引之后其查询效率会得到很大的改善。掌握了索引和视图之后你就具有了 KingbaseES 高效查询的关键能力下篇文章我们会学习“用户与权限管理”从而保障数据库访问的安全并做到“不同用户访问不同数据”这样细致的控制。

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

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

立即咨询