Oracle資料庫基本操作(二) —— 視圖、序列、索引、同義詞

来源:https://www.cnblogs.com/gdwkong/archive/2018/03/05/8504239.html
-Advertisement-
Play Games

本文主要介紹Oracle資料庫中視圖、序列、索引、同義詞的相關使用方法。 ...


一、視圖(Views)與 同義詞

  1、視圖:實際上是對查詢結果集的封裝,視圖本身不存儲任何數據,所有的數據都存放在原來的表中;

     在邏輯上可以把視圖看作是一張表

  2、作用:

    • 封裝查詢語句,簡化複雜的查詢需求
    • 屏蔽表中的細節

  3、語法: 

create [or replace] view 視圖的名稱 as 查詢語句 [with read only]

  4、視圖和同義詞:

    • 屏蔽了查詢過程步驟
    • 屏蔽了真實的表名 增加了代碼被破解的難度

  5、示例:

select * from emp;

-- 封裝成一個視圖: 獲取10號部門的員工信息
create or replace view view_test1 as select * from emp where deptno=10;
select * from view_test1;

-- 簡化查詢語句
CREATE VIEW view_test2 AS SELECT
    SUM(cc) total,
    SUM(CASE yy WHEN '1980' THEN cc END) "1980",
    SUM(CASE yy WHEN '1981' THEN cc END) "1981",
    SUM(CASE yy WHEN '1982' THEN cc END) "1982",
    SUM(CASE yy WHEN '1987' THEN cc END) "1987"
FROM(
        SELECT
            TO_CHAR(HIREDATE, 'YYYY') YY,
            COUNT(*) CC
        FROM
            EMP
        GROUP BY
            TO_CHAR(HIREDATE, 'YYYY')
    ) TT ;
select * from view_test2;

-- 屏蔽表中的細節
create or replace view view_test3 as select ename,job,mgr,hiredate from emp;
-- 通過視圖修改數據
update view_test3 set ename='SMITH' where ename='SMI%TH';
-- 創建只讀視圖
create view view_test4 as select ename,job,mgr,hiredate from emp with read only;
-- 報錯 ORA-01733: virtual column not allowed here
update view_test4 set ename='SMITH2' where ename='SMITH';
-- 同義詞: 相當於是取了一個別名
create synonym yuangong for view_test3;
select * from yuangong;

二、序列

  序列: 1,2,3,4,5,6,7....

  作用: 模擬類似mysql中auto_increment自動增長的編號

  1、語法:

create sequence 序列名稱
start with 從幾開始
increment by 每次遞增多少
minvalue | nominvalue
maxvalue | nomaxvalue
cycle | nocycle
cache 緩存幾個數 3
    1,2,3
        4,5,6
-- currval:序列當前取到哪個值,必須是調用了一次nextval之後才能正常使用
-- nextval:序列中的下一個值
-- 註意:序列中的值,一旦被取過,無論回滾/發生異常,序列都是永不回頭向下遞增的

  2、使用示例

-- 1,2,3,4,5,6,1,2,3,4,5,6
create sequence seq_test01
start with 1
minvalue 1
maxvalue 6
cycle
cache 3;

-- 需先執行nextval語句後才有效 
select seq_test01.currval from dual;
select seq_test01.nextval from dual;

-- 開發過程,通常寫法如下:
create sequence seq_test02;
-- 建表 
create table louceng(
    lou number primary key
);
-- 執行兩次 
insert into louceng values(seq_test02.nextval);
-- 1  2
select seq_test02.currval from dual;

select * from louceng;

三、索引

3.1 索引概述   

  索引:索引是一種已經排好序的幫助資料庫快速查找數據的數據結構,主要是用來幫助資料庫快速的找到數據 相當於一本書的目錄。

   語法: 

create index 索引名稱 on 表名(列名1,列名2....);

  主鍵約束: 自帶唯一索引

  唯一約束: 自帶唯一索引

3.2 索引作用示例

 1 -- 創建測試數據500萬
 2 -- 創建一張表
 3 create table wbw(
 4     c1 number primary key,
 5     c2 varchar2(20),
 6     c3 varchar2(20)
 7 );
 8 -- 插入500萬條記錄
 9 create sequence seq_wbw;
10 
11 -- PLSQL中的迴圈(283s) 
12 declare
13 
14 begin 
15    for i in 1..5000000 loop
16     insert into wbw values(seq_wbw.nextval,'c2:'||i,'c3:'||i);
17    end loop;
18    commit;
19 end;
20 
21 -- 在沒有創建索引的情況下(2.37s)
22 select * from wbw where c2='c2:4000000';
23 
24 -- 0.00s
25 select * from wbw where c1=4000000; 
26 
27 -- 創建索引(35.77s)
28 create index wbw_c2 on wbw(c2);
29 -- 索引列下 0.15s 
30 select * from wbw where c2='c2:4000000';
31 -- 非索引列下 2.38s
32 select * from wbw where c3='c3:4000000';

3.3 索引擴展

  3.3.1 索引優化概述

  SQL語句的執行計劃(SQL語句分析的時候): 將SQL語句發送給資料庫, 資料庫分析執行這條語句需要經歷哪些步驟,消耗多少資源

  SQL優化的步驟:

1.找到需要優化的語句

2.通過執行計划去分析SQL語句

3.確定優化方案

  索引的原理: 索引是一種已經排好序的幫助資料庫快速查找數據的數據結構 BTree : B樹, Balance, 平衡多路查找樹

  索引的利弊:

    好處: 提高查詢的效率

    缺點: 占資源,反向影響增刪改的效率

  什麼時候創建索引?

1.數據量比較大時候

2.哪些列經常作為查詢的條件

  3.3.2 使用示例:

 1 -- 沒有創建多列索引的情況下  0.50s
 2 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
 3 
 4 -- 創建索引(41.43s)
 5 create index wbw_c23 on wbw(c2,c3);
 6 
 7 
 8 -- 創建多列索引的情況下 0.25s
 9 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
10 -- 1.80s
11 select * from wbw where c3='c3:4000001';

  3.3.3 執行計劃圖解

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Oracle10g記憶體應該最少為512M,最好為1GB或以上; Oracle11g記憶體最好為2GB或以上 Oracle10g and Oracle11g 必須使用Internet瀏覽器來登錄Oracle資料庫企業管理器,獲取HTTPS埠好的途徑是$ORACLE_HOME\install。筆者電腦 ...
  • MySQL SQL語句的優化,查詢慢日誌,使用工具分析慢查詢日誌,優化的策略 ...
  • 安裝discuz mysqli_contect advice_mysqli_connect不支持的問題 1、問題所在主要是查看php安裝 正常情況下 會有右側的編譯 2、主要是右側標紅色的部分 ...
  • 轉譯:(https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_finding_exact_values) 當進行精確值查找時, 我們會使用過濾器(filters)。過濾器很重要, ...
  • 資料庫存儲引擎:InnoDB 啟用binlong 一、恢復誤刪除的資料庫到最新狀態 1、備份資料庫 2、對資料庫誤刪除 3、對資料庫添加新數據 4、發現問題對資料庫進行恢復 修改bin.sql,找到誤操作命令註釋或刪除 5、查詢恢復是否完整 二、基於LVM的備份還原 1、分離數據和binlog到各自 ...
  • 有兩個表分別是 A用戶下的 T_SRC_WEATHER_TSPG欄位如圖, B用戶下的t_src_weather 表,如圖: 要求,當A用戶下的T_SRC_WEATHER_TSPG表有插入或者更新數據時,同時將數據同步至B用戶下的t_src_weather表中, 創建觸發器,sql語句如下: CRE ...
  • 1.索引(Index)是幫助MySQL高效獲取數據的數據結構,可以理解為“排好序的快速查找數據結構”,在數據之外,資料庫系統還維護著滿足特定查找演算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找演算法 2.建表的時候創建索引,創建群發已發送郵件表:creat ...
  • 一、備份分類 按介質分類: 物理備份 指通過拷貝資料庫文件方式完成備份,適用於資料庫很大,數據重要且需要快速恢復的資料庫。 邏輯備份 指通過備份資料庫的邏輯結構和數據內容的方式完成備份,適用於資料庫不是很大,或需要對導出文件做一定修改,或重建此庫的情況。 優缺點: 物理備份速度快於邏輯備份,因為邏輯 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...