最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle數(shù)據(jù)庫索引查詢方式

 更新時(shí)間:2026年01月06日 08:59:55   作者:dazhong2012  
文章介紹了索引的類型、適用場景、優(yōu)缺點(diǎn),以及索引查詢方法和優(yōu)化策略,還提供了一個(gè)查詢實(shí)踐案例,幫助讀者更好地理解和應(yīng)用索引優(yōu)化

一、索引基礎(chǔ)概念

??索引類型與適用場景??

  • ??B樹索引??:最常用,適合高基數(shù)列(唯一值多)的等值或范圍查詢。

  • ??位圖索引??:適用于低基數(shù)列(如性別、狀態(tài)),常用于數(shù)據(jù)倉庫。

  • ??函數(shù)索引??:基于列的函數(shù)表達(dá)式創(chuàng)建(如UPPER(name)),優(yōu)化帶函數(shù)的查詢。

  • ??復(fù)合索引??:多列組合,列順序至關(guān)重要(高選擇性列在前)。

  • ??反向索引??:優(yōu)化模糊查詢(如LIKE ‘%abc’)。

?? 索引的優(yōu)缺點(diǎn)??

  • 優(yōu)點(diǎn)??:加速數(shù)據(jù)檢索,減少磁盤I/O。
  • 缺點(diǎn)??:占用存儲(chǔ)空間;降低DML操作(增刪改)效率;需定期維護(hù)。

二、索引查詢方法

1. ??查看索引元信息??

??表的所有索引??

SELECT index_name, index_type, uniqueness 
FROM dba_indexes 
WHERE table_name = 'EMPLOYEES';

??索引的列信息??

SELECT column_name, column_position 
FROM dba_ind_columns 
WHERE index_name = 'IDX_DEPT_FIRSTNAME';

索引所在的表信息分析

SELECT i.index_name, i.table_name, ic.column_name, ic.column_position
FROM dba_indexes i
JOIN dba_ind_columns ic ON i.index_name = ic.index_name
WHERE i.index_name = 'IDX_NAME'; --按索引名稱條件查詢

2. ??分析索引使用情況??

??監(jiān)控索引使用頻率??

SELECT * FROM v$index_usage;  -- 跟蹤索引是否被有效利用,需 12c 以上版本管理員權(quán)限

??檢查未使用索引??

SELECT index_name FROM dba_indexes 
WHERE index_name NOT IN (SELECT name FROM v$index_usage);

索引碎片與空間效率

-- 1.查詢當(dāng)前用戶創(chuàng)建的索引碎片率
SELECT index_name,
       blevel,
       leaf_blocks,
       clustering_factor,
       ROUND((leaf_blocks * 100) / NULLIF(clustering_factor, 0), 2) AS fragmentation_ratio
FROM (
    SELECT di.index_name,
           di.blevel,
           di.leaf_blocks,
           di.clustering_factor
    FROM dba_indexes di
    JOIN dba_tables dt ON di.table_name = dt.table_name
    WHERE dt.owner = USER -- 只查詢當(dāng)前用戶創(chuàng)建的表
      AND di.clustering_factor > 1
) t
WHERE (leaf_blocks * 100) / clustering_factor > 30; -- >30%表示需重建

-- 2.查詢 索引所在的表信息分析
SELECT i.index_name, i.table_name, ic.column_name, ic.column_position
FROM dba_indexes i
JOIN dba_ind_columns ic ON i.index_name = ic.index_name
WHERE i.index_name = 'IDX_NAME'; --按索引名稱條件查詢

--3.重建碎片化索引??
ALTER INDEX IDX_NAME REBUILD ONLINE;  -- IDX_NAME  為索引名稱

3. ??執(zhí)行計(jì)劃分析??

EXPLAIN PLAN FOR 
SELECT * FROM employees WHERE department_id = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

關(guān)鍵指標(biāo)??:

  • INDEX RANGE SCAN:索引有效使用。
  • FULL TABLE SCAN:可能缺失或未使用索引。

三、優(yōu)化索引空間的策略?

1. 創(chuàng)建索引

CREATE UNIQUE INDEX idx_user_name ON user_info(user_name) 
TABLESPACE idx_tbs 
COMPRESS NOLOGGING;

2. 重建碎片化索引??

ALTER INDEX IDX_OLD REBUILD ONLINE;  -- 減少空間碎片,提升查詢效率

3. ??調(diào)整存儲(chǔ)參數(shù)??

ALTER INDEX IDX_LARGE PCTFREE 10;  -- 降低空閑空間預(yù)留,壓縮索引體積

4. 刪除冗余索引??

DROP INDEX IDX_REDUNDANT;  -- 通過監(jiān)控確認(rèn)使用率低的索引

5. ??啟用高級壓縮??(僅限企業(yè)版)

ALTER INDEX IDX_BIG COMPRESS ADVANCED LOW;  -- 節(jié)省30-50%空間

四、關(guān)鍵監(jiān)控指標(biāo)??

??指標(biāo)?? ??查看方式?? ??優(yōu)化閾值??
??索引大小??dba_segments.bytes>表空間的20%需優(yōu)化
??碎片率??(leaf_blocks / clustering_factor) * 100>30%需重建
??使用頻率??v$index_usage.user_reads近30天無讀操作可刪
??分區(qū)均勻性??dba_index_partitions.bytes 的方差值方差>50%需調(diào)整分區(qū)

五、 查詢實(shí)踐案例

1. ??查詢 Oracle 表空間大小

-- 表空間使用率監(jiān)控(含自動(dòng)擴(kuò)展?fàn)顟B(tài))
SELECT 
    df.tablespace_name "Tablespace",
    df.total_mb,
    df.total_mb - fs.free_mb "Used_MB",
    fs.free_mb "Free_MB",
    ROUND((df.total_mb - fs.free_mb) / df.total_mb * 100, 2) Pct_Used, -- 使用率
    autoext "AutoExt"
FROM 
    (SELECT tablespace_name, 
            SUM(bytes)/1024/1024 total_mb,
            MAX(DECODE(autoextensible,'YES','Y','N')) autoext
     FROM dba_data_files 
     GROUP BY tablespace_name) df
JOIN 
    (SELECT tablespace_name, 
            SUM(bytes)/1024/1024 free_mb 
     FROM dba_free_space 
     GROUP BY tablespace_name) fs 
    ON df.tablespace_name = fs.tablespace_name
WHERE ROUND((df.total_mb - fs.free_mb) / df.total_mb * 100, 2) > 80  -- 僅顯示>80%使用率的表空間
ORDER BY Pct_Used DESC;

結(jié)果示例:

Tablespacetotal_mbUsed_MBFree_MBPct_UsedAutoExt
TBS_PICP3548330923993.26
TBS_PICP_NEW4048352352587.03

2. 查詢 Oracle 索引使用情況

替換 PICP_FORMAL(表用戶) 和 T_USER_INFO(表名稱 需大寫)

-- 替換 PICP_FORMAL 和 T_USER_INFO(需大寫)
WITH table_info AS (
    SELECT 
        t.owner,
        t.table_name,
        t.tablespace_name,
        t.num_rows,
        t.avg_row_len,
        ROUND((t.num_rows * t.avg_row_len) / 1024 / 1024, 2) AS estimated_data_size_mb,
        ROUND(SUM(s.bytes) / 1024 / 1024, 2) AS actual_table_size_mb
    FROM dba_tables t
    JOIN dba_segments s ON t.owner = s.owner AND t.table_name = s.segment_name
    WHERE t.owner = 'PICP_FORMAL'
      AND t.table_name = 'T_USER_INFO'
      AND s.segment_type = 'TABLE'
    GROUP BY t.owner, t.table_name, t.tablespace_name, t.num_rows, t.avg_row_len
),
index_info AS (
    SELECT 
        i.index_name,
        ROUND(s.bytes / 1024 / 1024, 2) AS index_size_mb,
        i.uniqueness
    FROM dba_indexes i
    JOIN dba_segments s ON i.owner = s.owner AND i.index_name = s.segment_name
    WHERE i.table_owner = 'PICP_FORMAL'
      AND i.table_name = 'T_USER_INFO'
      AND s.segment_type = 'INDEX'
)
SELECT 
    -- 表基本信息
    ti.table_name,
    ti.tablespace_name,
    ti.num_rows,
    ti.avg_row_len,
    ti.estimated_data_size_mb,
    ti.actual_table_size_mb,
    
    -- 索引詳細(xì)信息
    ii.index_name,
    ii.index_size_mb,
    ii.uniqueness,
    
    -- 索引匯總信息
    ROUND(SUM(ii.index_size_mb) OVER (), 2) AS total_index_size_mb,
    ROUND((SUM(ii.index_size_mb) OVER () / ti.actual_table_size_mb) * 100, 2) AS index_to_table_ratio_percent
FROM table_info ti
LEFT JOIN index_info ii ON 1=1
ORDER BY ii.index_size_mb DESC NULLS LAST;

示例結(jié)果如下:

TABLE_NAMETABLESPACE_NAMENUM_ROWSAVG_ROW_LENESTIMATED_DATA_SIZE_MBACTUAL_TABLE_SIZE_MBINDEX_NAMEINDEX_SIZE_MBUNIQUENESSTOTAL_INDEX_SIZE_MBINDEX_TO_TABLE_RATIO_PERCENT
T_USER_INFOTBS_PICP_NEW63604637262.55271PK_T_USER_ID45UNIQUE37137.09
T_USER_INFOTBS_PICP_NEW63604637262.55271IDX_USER_NAME28NONUNIQUE7137.09

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡單三步輕松實(shí)現(xiàn)ORACLE字段自增

    簡單三步輕松實(shí)現(xiàn)ORACLE字段自增

    第一步:創(chuàng)建一個(gè)表、第二步:創(chuàng)建一個(gè)自增序列以此提供調(diào)用函數(shù)、第三步:我們通過創(chuàng)建一個(gè)觸發(fā)器,使調(diào)用的方式更加簡單
    2013-11-11
  • oracle如何查詢表中所有字段

    oracle如何查詢表中所有字段

    這篇文章主要介紹了oracle如何查詢表中所有字段問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • navicat使用Oracle創(chuàng)建庫以及用戶超詳細(xì)教程

    navicat使用Oracle創(chuàng)建庫以及用戶超詳細(xì)教程

    本文介紹如何使用Navicat連接Oracle數(shù)據(jù)庫,步驟包括準(zhǔn)備工作、新建連接、輸入用戶名和密碼、測試連接、建立庫和用戶、授權(quán)以及測試的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • EXECUTE IMMEDIATE用法小結(jié)

    EXECUTE IMMEDIATE用法小結(jié)

    EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.
    2009-09-09
  • Oracle中的SUM用法講解

    Oracle中的SUM用法講解

    今天小編就為大家分享一篇關(guān)于Oracle中的SUM用法講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 利用windows任務(wù)計(jì)劃實(shí)現(xiàn)oracle的定期備份

    利用windows任務(wù)計(jì)劃實(shí)現(xiàn)oracle的定期備份

    我們搞數(shù)據(jù)庫管理系統(tǒng)的經(jīng)常會(huì)遇到數(shù)據(jù)庫定期自動(dòng)備份的問題,有各種各樣的方法,這里介紹一種利用windows任務(wù)計(jì)劃實(shí)現(xiàn)oracle定期備份的方法供大家分享。
    2009-08-08
  • Oracle數(shù)據(jù)庫數(shù)據(jù)遷移完整解決步驟

    Oracle數(shù)據(jù)庫數(shù)據(jù)遷移完整解決步驟

    我們常常需要對數(shù)據(jù)進(jìn)行遷移,遷移到更性能配置更高級的主機(jī)OS上、遷移到遠(yuǎn)程的機(jī)房、遷移到不同的平臺(tái)下,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫數(shù)據(jù)遷移的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • oracle數(shù)據(jù)庫中l(wèi)istagg函數(shù)使用詳解

    oracle數(shù)據(jù)庫中l(wèi)istagg函數(shù)使用詳解

    listagg函數(shù)是Oracle數(shù)據(jù)庫中的一個(gè)聚合函數(shù),用于將一組值連接成一個(gè)以指定分隔符分隔的字符串,這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫中l(wèi)istagg函數(shù)使用的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • Oracle數(shù)據(jù)表中的死鎖情況解決方法

    Oracle數(shù)據(jù)表中的死鎖情況解決方法

    這篇文章主要介紹了Oracle數(shù)據(jù)表中的死鎖情況解決方法,包括如何避免死鎖的建議,需要的朋友可以參考下
    2016-01-01
  • Oracle RMAN三種不完全恢復(fù)方式的實(shí)戰(zhàn)指南

    Oracle RMAN三種不完全恢復(fù)方式的實(shí)戰(zhàn)指南

    在Oracle數(shù)據(jù)庫的日常管理中,不完全恢復(fù)(Incomplete Recovery)是一項(xiàng)重要且實(shí)用的技能,尤其是在面對人為誤操作(如誤刪表)或邏輯故障(如表空間損壞)時(shí),本文將通過三個(gè)實(shí)際演示案例,逐一呈現(xiàn)三種不完全恢復(fù)方式的操作步驟,需要的朋友可以參考下
    2025-10-10

最新評論

遂溪县| 运城市| 开平市| 海兴县| 益阳市| 吴堡县| 屯留县| 海南省| 岳池县| 郧西县| 章丘市| 大化| 武平县| 南宁市| 泰和县| 紫金县| 天门市| 沁水县| 民乐县| 同心县| 祁东县| 五峰| 贺州市| 永吉县| 夏河县| 东乡县| 敦化市| 万荣县| 凤凰县| 疏勒县| 庐江县| 时尚| 弥勒县| 咸丰县| 墨竹工卡县| 工布江达县| 新密市| 沽源县| 浦县| 大城县| 镇安县|