當前位置:首頁 » 存儲配置 » 存儲過程的索引

存儲過程的索引

發布時間: 2022-06-22 04:25:50

『壹』 用sqlserver存儲過程重建索引,該怎麼解決

如果語句是你想要的,就把它放到存儲過程裡面
Use [資料庫名稱]
Go
DECLARE @DBCCString NVARCHAR(1000)
DECLARE @TableName VARCHAR(100)
DECLARE Cur_Index CURSOR
FOR
SELECT Name AS TblName
FROM sysobjects
WHERE xType='U'
ORDER BY TblName
FOR READ ONLY
OPEN Cur_Index
FETCH NEXT FROM Cur_Index
INTO @TableName
WHILE @@FETCH_STATUS=0
BEGIN
SET @DBCCString = 'DBCC DBREINDEX(@TblName,'''')WITH NO_INFOMSGS'
EXEC SP_EXECUTESQL @DBCCString,N'@TblName VARCHAR(100)', @TableName
PRINT '重建表' + @TableName +'的索引........OK!'
FETCH NEXT FROM Cur_Index INTO @TableName
END
CLOSE Cur_Index
DEALLOCATE Cur_Index
PRINT '操作完成!'
go

『貳』 全文索引的技術存儲過程

目前全文索引技術正走向人工智慧化,也是發展的方向。
MicroSoft SqlServer 2000/2005 中的全文索引是由一系列存儲過程來完成的,這些存儲過程按先後順序羅列如下:
1、啟動資料庫的全文索引服務存儲過程:sp_fulltext_service
2、初始化全文索引存儲過程:sp_fulltext_database
3、建立全文索引目錄存儲過程:sp_fulltext_catalog
4、在全文索引目錄中添加刪除表標記存儲過程:sp_fulltext_table
5、在全文索引目錄的表中添加或刪除列標記存儲過程:sp_fulltext_column

『叄』 如何使存儲過程根據入參走不同的索引

入參很不固定,比如以上的例子中,
如果穿了EMP_NO或者EMP_NAME,走索引選擇性非常好,性能是不錯的,需要他走 IDX_EMP_EMPNO或者 IDX_EMP_EMPNAME的索引
但是如果傳的是部門DEPT_NO,因為部門只有幾個,想讓其走FFS。。
從AWR中看到此SQL已經是TOP 5的位置了,應該是綁定變數的原因,執行計劃一直走的是FFS。不知道有什麼好法子,根據入參走合適的索引

『肆』 資料庫包括基本表、視圖、索引和存儲過程等元素,什麼是組成資料庫的基本元素

說說自己不成熟的淺見:
1、基本表、視圖、索引和存儲過程等只是資料庫的表現方式,不是資料庫的基本元素。
2、資料庫的基本元素是資料庫的思維,即如何把現實事件中具體的事物(數據表格、圖像等)抽象成數據存儲到基本表中,之後通過存儲過程、視圖等對這些數據進行操作達到對現實事物的控制。

『伍』 怎麼在存儲過程中動態加入索引

create or replace procere sp_crt_stg_index( p_src_tbl_name varchar2,p_tgt_tbl_name varchar2,p_tx_date varchar2)
is
v_crt_ind_sql varchar2(4000) := '';
v_drop_ind_sql varchar2(4000) := '';
v_ind_name varchar2(100) := '';
v_tgt_ind_name varchar2(100) := '';
v_col_list varchar2(1000) := '';
v_col_name varchar2(100) := '';
i_ind_col_cnt number(2,0) := 0;
i_tbl_cnt number(2,0) := 0;
i_ind_cnt number(2,0) := 0;
v_step_no varchar2(3) :='';
begin
--step 1 檢查索引定義是否存在
v_step_no :='1';
select count(1) into i_ind_col_cnt from all_ind_columns
where table_name = p_src_tbl_name;
if(i_ind_col_cnt = 0 ) then
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,p_src_tbl_name||'不存在索引定義');
return;
end if;
--step 2 檢查目標表是否存在
v_step_no :='2';
select count(1) into i_tbl_cnt from tabs
where table_name = p_tgt_tbl_name;
if(i_tbl_cnt = 0 ) then
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,p_src_tbl_name||'不存在');
return;
end if;
--step 3 創建索引
v_step_no :='3';
for cur_ind in (select index_name from all_indexes where table_name = p_src_tbl_name) loop
v_ind_name := cur_ind.index_name;
v_col_name := '';
v_col_list := '(';
for cur_ind_col in (select column_name from all_ind_columns where index_name = v_ind_name order by column_position) loop
v_col_name := cur_ind_col.column_name;
v_col_list := v_col_list||v_col_name||',';
end loop;
v_col_list := v_col_list||')';
v_col_list := replace(v_col_list,',)',')');
v_tgt_ind_name :=replace(v_ind_name,p_src_tbl_name,p_tgt_tbl_name);
v_tgt_ind_name := v_tgt_ind_name||substr(p_tx_date,7,21);
select count(1) into i_ind_cnt from all_indexes where index_name = v_tgt_ind_name;
if(i_ind_cnt > 0) then
v_drop_ind_sql := 'drop index '||v_tgt_ind_name;
execute immediate v_drop_ind_sql;
end if;
sp_log('sp_crt_stg_index',v_step_no,'1',p_tx_date,v_tgt_ind_name||'創建開始');
v_crt_ind_sql := 'create index '||v_tgt_ind_name||' on '||p_tgt_tbl_name||v_col_list||' nologging';
if(v_crt_ind_sql is not null) then
execute immediate v_crt_ind_sql;
end if;
sp_log('sp_crt_stg_index',v_step_no,'1',p_tx_date,v_tgt_ind_name||'創建結束');
end loop;
exception
when others then
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,v_tgt_ind_name||'創建異常:'||SQLERRM);
end;

#########################

---- 日期類型轉換
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS');
----Oracle檢查分區
select count(1)
from ALL_TAB_PARTITIONS
where table_name = p_tgt_tbl_name
and PARTITION_NAME = v_prt_name;
----碼表
Select * From ict_s_dic Where opttype = 'ID_TYPE';
decode 內部欄位拼接
decode(Date_Nextvisit,'','下次跟進時間:['||Date_Nextvisit||']') RMK1,

----拼接欄位,刪除表
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM TABS WHERE TABLE_NAME LIKE 'M_ICT%';
Select * From tabs ;
----交換分區,分區交換後數據是否交換?
'ALTER TABLE '|| p_tgt_tbl_name ||' EXCHANGE PARTITION '||v_prt_name||' WITH TABLE '||p_src_tbl_name;
----查詢某表是否存在
select count(1) from tabs
where table_name = p_src_tbl_name;
----重建索引
ALTER index ind_id_idx rebuild
----創建索引nologging
create index I_ICT_CUST_INFO__0 on ICT_CUST_INFO_20141222 (CUST_NO)
nologging;
----查詢分區內數據
select count(1) from stg_ict_trade_info partition(ICT_PRT_2014005);
Select * From User_Ind_Partitions;
Select * From User_Part_Indexes;

-----查詢索引
select index_name from ALL_INDEXES WHERE TABLE_NAME=p_src_tbl_name;
-----查詢分區
select * from ALL_TAB_PARTITIONS
where table_name = p_tgt_tbl_name and PARTITION_NAME = v_prt_name;
-----查詢表名
select * from tabs where table_name = p_tgt_tbl_name;
-----清空表分區數據
'ALTER TABLE '||p_tgt_tbl_name||' TRUNCATE PARTITION ' || v_prt_name;
-----增加表分區
'ALTER TABLE '||p_tgt_tbl_name||' ADD PARTITION ' || v_prt_name||' VALUES LESS THAN (''' ||v_monthend||''') TABLESPACE ICLIENT_O_DATA01 ';
-----重建索引
'ALTER INDEX '||cur_ind.index_name|| ' REBUILD PARALLEL 128 COMPUTE STATISTICS NOLOGGING';
-----交換分區
'ALTER TABLE '|| p_tgt_tbl_name ||' EXCHANGE PARTITION '||v_prt_name||' WITH TABLE '||p_src_tbl_name||' INCLUDING INDEXES';

-----oralce創建同義詞------------

create or replace public SYNONYM ICT_ORG_BPH for iclientodata.ICT_ORG_BPH;

-----oracle 賦許可權
grant select, insert, update, delete on ICT_ORG_BPH to ICLIENTOOPR; --賦許可權

---------------DBA查看錶空間------------
select a.tablespace_name,
a.bytes / 1024 / 1024 / 1024 "Sum G",
(a.bytes - b.bytes) / 1024 / 1024 / 1024 "used G",
b.bytes / 1024 / 1024 / 1024 "free G",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc

-------------------------------------------------------------------------------------
--oracle 生成刪表語句,
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM TABS WHERE TABLE_NAME LIKE 'M_ICT%'
--查詢oracle 中ICT開頭的
SELECT * FROM tabs WHERE TABLE_NAME LIKE 'ICT%'

----oracle 表分析語句
'ANALYZE TABLE ' || v_ana_tbl_name || ' estimate system statistics';

例如:ANALYZE TABLE ICT_SUM_AST_DBT_CUST ESTIMATE SYSTEM STATISTICS;
-----------查看鎖定對象及會話
SELECT OBJECT_NAME,MACHINE,S.SID,S.SERIAL#
FROM GV$LOCKED_OBJECT I,DBA_OBJECTS O,GV$SESSION S
WHERE I.OBJECT_ID=O.OBJECT_ID AND I.SESSION_ID=S.SID;
----------oralce解鎖
ALTER SYSTEM KILL SESSION '280,219';

授權腳本生成方法:
select 'grant select on table dmccrm.'||tbl_name||' to public,ex_sdbods; ' from t_ict_tbl_type where tbl_type in('ALL','GP') and ETL_DIR IN( 'GP->ORACLE','無需同步');

-----------oracle批量生成同義詞
SELECT 'create or replace public synonym '||table_name ||' for iclientodata.'||table_name FROM tabs WHERE table_name like 'ICT_%'

-----------oracle批量生成修改表欄位的長度
select 'ALTER TABLE '||TABLE_NAME||' MODIFY '||COLUMN_NAME||' NUMBER(30,8);' from cols t
where t.DATA_TYPE = 'NUMBER'
AND T.DATA_SCALE >0 AND SUBSTR(TABLE_NAME,-8,8)<>'20140531'

---------oracle 批量創建同義詞
select 'create or replace public synonym '||table_name||' for iclientodata.'||table_name||';' from user_tables WHERE table_name LIKE 'ICT_%' AND table_name NOT LIKE '%20140531';

-----------oracle 交換分區語句
ALTER TABLE ICT_CUST_LEVEL_HIS ADD PARTITION ICT_PRT_20140531 VALUES LESS THAN ('2014-06-01')
--------MERGE使用方法
MERGE INTO ICT_CUST_INFO_ALL a
USING
(
SELECT t.CUST_MNG_UM_NO ,t.CUST_NO
FROM ict_cust_mnger_rel t
WHERE t.CUST_NO IN
('600021562650', '600037441214', '600036874754', '600038507516',
'600020226746', '600038089420', '600041030403', '600038952992',
'600039468303')
)b
ON( a.cust_no= b.cust_no)
WHEN MATCHED THEN
UPDATE SET a.MAX_ASSET_INTRO_NO=b.CUST_MNG_UM_NO;

-------------oracle 樹形查詢,查詢機構編號為『9902』的和其下級子機構
select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY PRIOR ioi.org_id = ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1

-------------oracle 樹形查詢,查詢機構編號為『9902』的和上級機構

select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY ioi.org_id = PRIOR ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1

-------------oracle 樹形查詢,查詢機構編號為『9902』的上級機構

select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY ioi.org_id = PRIOR ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1

----------查看錶名與表空間
Select * From user_tables Where table_name = 'ICT_RMT_APPO';
Select * From User_Tablespaces;

----------查詢SQL 預估時間
SELECT SE.SID,
OPNAME,
TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,
ELAPSED_SECONDS ELAPSED,
ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,
SQL_TEXT
FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
AND SL.SID = SE.SID
AND SOFAR != TOTALWORK
ORDER BY START_TIME;
------TYPE opty_cur IS REF CURSOR;
整體的意思是「創建一個類型變數cur,它引用游標」,除了cur外,其餘全是關鍵字。
TYPE cur:定義類型變數 ,is ref cursor:相當於數據類型,不過是引用游標的數據類型。
這種變數通常用於存儲過程和函數返回結果集時使用,
因為PL/SQL不允許存儲過程或函數直接返回結果集,
但可以返回類型變數,於是引用游標的類型變數作為輸出參數或返回值就應運而生了。
----查殺進程
SELECT dob.OBJECT_NAME Table_Name,
lo.LOCKED_MODE,
lo.SESSION_ID,
vss.SERIAL#,
vps.spid,
vss.action Action,
vss.osuser OSUSER,
vss.process AP_PID,
VPS.SPID DB_PID,
'alter system kill session ' || '''' || lo.SESSION_ID || ',' ||
vss.SERIAL# || ''';' kill_command
from v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPS
where lo.OBJECT_ID = dob.OBJECT_ID
and lo.SESSION_ID = vss.SID
AND VSS.paddr = VPS.addr
order by 2, 3, DOB.object_name;

『陸』 Sqlserver中什麼是存儲過程,索引,游標,分別解釋解釋

你應該找本資料庫方面的書看看,一個簡單的描述很難讓你知道其中的意思。
存儲過程相當於一個方法,可以定義傳進去的值,返回的值,可以返回多個值或者不返回值。
然後根據業務邏輯寫一些處理代碼,對表進行增刪改查,甚至 建表 刪表,改表也可以,根據你的業務來。
索引就是針對表的某一個欄位來建立的,增加查詢速度或者約束,索引也分很多種,有簡單的查詢索引,主鍵索引,外鍵索引,唯一索引等等。
游標一般在存儲過程或函數中實用,有點類似代碼中的for循環,一個接一個的讀。
打這么多字累死了,問題根本不能完全描述這些名稱,你還是看看書吧。

『柒』 SQL SERVER 中存儲過程、視圖、索引是什麼概念

儲存過程:簡單說就是SQL代碼的集合,和C語言里的函數類似,
儲存過程把SQL語句寫在一起,
調用儲存過程時
SQLserver執行 這些語句。
它有參數,有返回值。
優點:
1.模塊化設計
像其他程序語言的函數一樣,單獨出來,可以調用它n次,
並且可以獨立於源代碼,單獨修改儲存過程。
2.更快執行如果執行大量SQL代碼或重復執行,儲存過程比SQL批代碼執行要快。
3.減少網路流量
一條SQL語句就可以執行上千條SQL代碼,肯定視圖:顧名思意,可以看的圖形。
用圖形來表示資料庫中表,或表之間的關系
是虛擬表,是來自其一個表,或多個表的行或列 的子集。
臨時表是暫時存在的,而視圖是以文件存儲的,只要不人為刪除,
是永久存儲的,所以視圖不是臨時表。
索引:舉一個列子,你在學校要找一年級三班教室,但是你不知具體位置,
你只能按照順序,一間教室一間教室的找,
但如果,你看學校地圖(假設的),上面寫有一年級三班教室在XX單元XX樓左邊XX間,那你就可以直接到教室去了,
這里地圖就相當於索引,指明具體地址,使查詢更加的快捷。
SQL里就是這樣,要查詢某個數據,根據索引查找,比一個一個挨著查,更加的快捷。

『捌』 存儲過程、索引、視圖、觸發器 的區別

視圖:只是一種預先把語句編寫好的一種快照,在使用中,真正執行的還是這個語句問題;
索引:主要是考慮到操作性能的優化
存儲過程:是資料庫的邏輯塊處理
觸發器:主要考慮連帶性;
這4個種功能都不一樣;沒有什麼好比較的

『玖』 sql存儲過程是不是就是索引

索引是用來提高查詢機制的,可以理解為對資料庫的優化
存儲過程是把很多個sql語句放到一起,類似批處理一樣

『拾』 如何查看存儲過程中select語句使用索引的情況

也是習慣了SQL Server的存儲過程中直接可以使用select語句輸出結果集,但這個在Oracle中就行不通了。 如果你僅僅是想看到存儲過程中語句所影響的記錄內容,那麼可以考慮使用游標,然後循環游標用dbms_output將內容輸出,從而可以在dbms的輸出中

熱點內容
鏡像伺服器怎麼查詢到主ip 發布:2025-01-06 11:05:35 瀏覽:54
收手機源碼 發布:2025-01-06 10:54:06 瀏覽:764
webservice拒絕訪問 發布:2025-01-06 10:54:02 瀏覽:278
ipad伺服器出錯怎麼辦 發布:2025-01-06 10:53:31 瀏覽:900
centos編譯安裝lamp環境 發布:2025-01-06 10:44:55 瀏覽:263
家庭重疾險配置怎麼選 發布:2025-01-06 10:40:04 瀏覽:139
解壓cp 發布:2025-01-06 10:33:55 瀏覽:246
覺醒第二關密碼多少 發布:2025-01-06 10:32:37 瀏覽:398
平板電腦配置不行怎麼處理 發布:2025-01-06 10:28:38 瀏覽:828
榮耀手機如何給網路設密碼 發布:2025-01-06 10:23:31 瀏覽:727