深入理解Oracle索引(18):函数索引的陷阱以及如何避免索引被污染
㈠ 函数索引的陷阱 使用函数索引一定要注意在函数代码变更后重建函数索引、否则、Oracle将返回错误结果但不给提示 测试如下: [plain] view plaincopyprint? SPANstyle=BACKGROUND-COLOR:rgb(102,102,102)hr@ORCLdroptabletpurge; Tabledropped. hr@ORCLcrea
㈠ 函数索引的陷阱使用函数索引一定要注意在函数代码变更后重建函数索引、否则、Oracle将返回错误结果但不给提示
测试如下:
[plain] view plaincopyprint?
- hr@ORCL> drop table t purge;
- Table dropped.
- hr@ORCL> create table t (x number,y varchar2(30));
- Table created.
- hr@ORCL> insert into t select rownum,rownum||'a' from dual connect by rownum
- 999 rows created.
- hr@ORCL> ed
- Wrote file afiedt.buf
- 1 create or replace function f_david(p_value varchar2) return varchar2
- 2 deterministic is
- 3 begin
- 4 return p_value;
- 5* end;
- 6
- 7 /
- Function created.
- hr@ORCL> create index idx_f_david_t on t (f_david(y));
- Index created.
- hr@ORCL> exec dbms_stats.gather_table_stats(ownname=>'HR',tabname=>'T',estimate_percent=>100,cascade=>TRUE,no_invalidate=>false);
- PL/SQL procedure successfully completed.
- hr@ORCL> select * from t where f_david(y)='8a';
- X Y
- ---------- ------------------------------
- 8 8a
- hr@ORCL> ed //ed是什么splplus命令?
- Wrote file afiedt.buf
- 1 create or replace function f_david(p_value varchar2) return varchar2
- 2 deterministic is
- 3 begin
- 4 return p_value||'b';
- 5* end;
- hr@ORCL> /
- Function created.
- /* 此时的函数 f_david 已经不是我们所认识的那个了、但是查询依然如故!!!*/
- hr@ORCL> select * from t where f_david(y)='8a';
- X Y
- ---------- ------------------------------
- 8 8a
- /* 索引重建查询没有记录、这才是我们要的正确结果*/
- hr@ORCL> drop index idx_f_david_t;
- Index dropped.
- hr@ORCL> create index idx_f_david_t on t (f_david(y));
- Index created.
- hr@ORCL> exec dbms_stats.gather_table_stats(ownname=>'HR',tabname=>'T',estimate_percent=>100,cascade=>TRUE,no_invalidate=>false);
- PL/SQL procedure successfully completed.
- hr@ORCL> select * from t where f_david(y)='8a';
- no rows selected
<span>hr@ORCL> drop table t purge; Table dropped. hr@ORCL> create table t (x number,y varchar2(30)); Table created. hr@ORCL> insert into t select rownum,rownum||'a' from dual connect by rownum ed Wrote file afiedt.buf 1 create or replace function f_david(p_value varchar2) return varchar2 2 deterministic is 3 begin 4 return p_value; 5* end; 6 7 / Function created. hr@ORCL> create index idx_f_david_t on t (f_david(y)); Index created. hr@ORCL> <span><span><strong>exec dbms_stats.gather_table_stats(ownname=>'HR',tabname=>'T',estimate_percent=>100,cascade=>TRUE,no_invalidate=>false); //这句话什么意思?</strong> </span> </span>PL/SQL procedure successfully completed. hr@ORCL> select * from t where f_david(y)='8a'; X Y ---------- ------------------------------ 8 8a hr@ORCL> ed Wrote file afiedt.buf 1 create or replace function f_david(p_value varchar2) return varchar2 2 deterministic is 3 begin 4 return p_value||'b'; 5* end; hr@ORCL> / Function created. /* 此时的函数 f_david 已经不是我们所认识的那个了、但是查询依然如故!!!*/ hr@ORCL> select * from t where f_david(y)='8a'; X Y ---------- ------------------------------ 8 8a /* 索引重建查询没有记录、这才是我们要的正确结果*/ hr@ORCL> drop index idx_f_david_t; Index dropped. hr@ORCL> create index idx_f_david_t on t (f_david(y)); Index created. hr@ORCL> exec dbms_stats.gather_table_stats(ownname=>'HR',tabname=>'T',estimate_percent=>100,cascade=>TRUE,no_invalidate=>false); PL/SQL procedure successfully completed. hr@ORCL> select * from t where f_david(y)='8a'; no rows selected</span>
㈡ 避免索引被污染
这里给出 2 条意见、
① 不要在字段前增加函数
如:
to_char(start_time,'yyyy.mm.dd') between '2013.06.06' and '2013.06.10'
和
start_time between to_date('2013.06.06','yyyy.mm.dd') and to_date('2013.06.10','yyyy.mm.dd')
任何时候都应该是第二种!!!
② 不要把字段嵌入到表达式中
如:
start_time + 7
和
start_time
By David Lin
2013-06-06
Good Luck

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Um die Oracle -Tablespace -Größe abzufragen, führen Sie die folgenden Schritte aus: Bestimmen Sie den Namen Tablespace, indem Sie die Abfrage ausführen: Wählen Sie Tablespace_Name aus dba_tablespaces. Abfragen Sie die Tablespace -Größe durch Ausführen der Abfrage: Summe (Bytes) als Total_Size, sum (bytes_free) als verfügbare_space, sum

Mit der Verschlüsselung von Oracle View können Sie Daten in der Ansicht verschlüsseln und so die Sicherheit sensibler Informationen verbessern. Die Schritte umfassen: 1) Erstellen des Master -Verschlüsselungsschlüssels (MEK); 2) Erstellen einer verschlüsselten Ansicht, der Ansicht und der Verschlüsselung der Ansicht und der MEK angeben; 3) Benutzern Sie die Benutzer, auf die verschlüsselte Ansicht zuzugreifen. Wie verschlüsselte Ansichten funktionieren: Wenn ein Benutzer nach einer verschlüsselten Ansicht nachgefragt wird, verwendet Oracle MEK, um Daten zu entschlüsseln und sicherzustellen, dass nur autorisierte Benutzer auf lesbare Daten zugreifen können.

Es gibt drei Möglichkeiten, Instanznamen in Oracle anzuzeigen: Verwenden Sie den "SQLPLUS" und "Instance_name aus v $ Instance". Befehle in der Befehlszeile. Verwenden Sie den "show Instance_name;" Befehl in SQL*Plus. Überprüfen Sie die Umgebungsvariablen (Oracle_sid unter Linux) über den Task -Manager des Betriebssystems, den Oracle Enterprise Manager oder über das Betriebssystem.

Datenimportmethode: 1. Verwenden Sie das SQLLoader -Dienstprogramm: Datendateien vorbereiten, Steuerdateien erstellen und SQLLOADER ausführen. 2. Verwenden Sie das IMP/Exp -Tool: Daten exportieren, Daten importieren. Tipp: 1. Empfohlener SQL*Loader für Big -Data -Sets; 2. Die Zieltabelle sollte vorhanden und die Spaltendefinition entspricht. 3. Nach dem Import muss die Datenintegrität überprüft werden.

Deinstallieren Sie die Methode für Oracle -Installationsfehler: Schließen Sie den Oracle -Service, löschen Sie Oracle -Programmdateien und Registrierungsschlüssel, Deinstallieren Sie Oracle -Umgebungsvariablen und starten Sie den Computer neu. Wenn das Deinstall fehlschlägt, können Sie das Oracle Universal Deinstall -Tool manuell deinstallieren.

Es gibt die folgenden Methoden, um Zeit in Oracle zu bekommen: current_timestamp: Gibt die aktuelle Systemzeit genau auf Sekunden zurück. SYSTIMESTAMP: genauer als Current_Timestamp, für Nanosekunden. SYSDATE: Gibt das aktuelle Systemdatum mit Ausnahme des Zeitteils zurück. To_char (sysdate, 'yyy-mm-dd hh24: mi: ss'): konvertiert das aktuelle Systemdatum und die Uhrzeit in ein bestimmtes Format. Extrakt: Extrahiert einen bestimmten Teil aus einem Zeitwert wie einem Jahr, Monat oder Stunde.

SQL -Anweisungen können basierend auf der Laufzeiteingabe erstellt und ausgeführt werden, indem die dynamische SQL von Oracle verwendet wird. Zu den Schritten gehören: Vorbereitung einer leeren Zeichenfolgenvariable zum Speichern von dynamisch generierten SQL -Anweisungen. Verwenden Sie die sofortige Ausführung oder Vorbereitung, um dynamische SQL -Anweisungen zu kompilieren und auszuführen. Verwenden Sie die Bind -Variable, um die Benutzereingabe oder andere dynamische Werte an dynamische SQL zu übergeben. Verwenden Sie sofortige Ausführung oder führen Sie aus, um dynamische SQL -Anweisungen auszuführen.

Ein AWR -Bericht ist ein Bericht, in dem die Datenbankleistung und Aktivitätsschnappschüsse angezeigt werden. Zu den Interpretationsschritten gehören: Identifizierung des Datums und der Uhrzeit des Aktivitäts -Snapshots. Sehen Sie sich einen Überblick über Aktivitäten und Ressourcenverbrauch an. Analysieren Sie Sitzungsaktivitäten, um Sitzungsarten, Ressourcenverbrauch und Warteeignisse zu finden. Finden Sie potenzielle Leistungsengpässe wie langsame SQL -Aussagen, Ressourcenbeständigkeit und I/A -Probleme. Wartenereignisse anzeigen, identifizieren und beheben Sie sie für die Leistung. Analysieren Sie die Muster für Latch- und Speichernutzung, um Speicherprobleme zu identifizieren, die Leistungsprobleme verursachen.
