Punca kegagalan indeks oracle: 1. Tidak menggunakan klausa WHERE 2. Menggunakan "IS NULL" dan "IS NOT NULL" 3. Menggunakan fungsi dalam klausa WHERE 5 . Gunakan operasi ketaksamaan dalam klausa WHERE 6. Bandingkan jenis data yang tidak sepadan, dsb.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.
Matlamat indeks Oracle adalah untuk mengelakkan imbasan jadual penuh dan meningkatkan kecekapan pertanyaan, tetapi kadangkala ia tidak produktif.
Sebagai contoh, terdapat berjuta-juta data dalam jadual, dan indeks ditambahkan pada medan tertentu, tetapi prestasi pertanyaan tidak bertambah baik Ini mungkin disebabkan oleh kegagalan indeks Oracle. Indeks Oracle mempunyai beberapa sekatan Jika anda melanggar sekatan indeks ini, walaupun anda telah menambah indeks, Oracle masih akan melakukan imbasan jadual penuh Prestasi pertanyaan tidak akan bertambah baik berbanding dengan tidak menambah indeks ke pangkalan data Overhed sistem untuk mengekalkan indeks mengakibatkan prestasi yang lebih teruk. Berikut ialah ringkasan tujuh kekangan utama yang boleh menyebabkan indeks Oracle gagal.
1. Tiada klausa WHERE
2. Penggunaan IS NULL dan BUKAN NULL
PILIH ... DARI emp. WHERE comm IS NULL; Indeks pada lajur kom akan menjadi tidak sah
3 Gunakan fungsi dalam klausa WHERE
Jika tiada indeks berasaskan fungsi digunakan, maka klausa where Apabila menggunakan fungsi pada lajur diindeks, pengoptimum akan mengabaikan indeks ini. Contohnya:
select * from staff where trunc(birthdate) = '01-MAY-82';
Tetapi apabila fungsi digunakan pada syarat, indeks boleh berkuat kuasa Tukar pernyataan di atas kepada pernyataan berikut dan anda boleh mencari melalui indeks.
select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);
Nota: Oracle masih menggunakan indeks untuk fungsi MIN, MAX.
4 Gunakan LIKE '%T' untuk pertanyaan kabur
5. Gunakan operasi ketaksamaan dalam klausa WHERE
Tidak sama dengan operasi termasuk: <>, !=, NOT colum >= ?, NOT colum <= ?
Sekatan ini boleh digantikan dengan OR, contohnya: colum <> 0 ===> colum>0 ATAU colum<0
6 indeks yang sama dan julat tidak akan digabungkan
SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10
kerja dan deptno. Indeks bukan unik, dalam kes ini Oracle tidak akan menggabungkan indeks, ia hanya akan menggunakan indeks pertama.
7. Perbandingan tidak sepadan dengan jenis data
dept_id ialah medan varchar2 Terdapat indeks pada medan ini, tetapi pernyataan berikut akan melaksanakan jadual penuh imbasan.
select * from dept where dept_id = 900198;
Ini kerana Oracle akan menukar klausa where secara automatik menjadi to_number(dept_id)=900198, yang bersamaan dengan menggunakan fungsi, yang mengehadkan penggunaan indeks. Cara yang betul untuk menulisnya adalah seperti berikut:
select * from dept where dept_id = '900198';
Tutorial yang disyorkan: "Tutorial Video Oracle"
Atas ialah kandungan terperinci Bagaimanakah Oracle menjadikan indeks tidak sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!