Artikel ini membahas cara mengoptimalkan performa query di
Microsoft Access 2000, Microsoft Access 2002 dan Microsoft Office Access
2003. Topik-topik berikut termasuk:
- Query Optimizer untuk Microsoft Jet database
mesin
- Waktu pertanyaan
- Menganalisis kinerja
- Tips untuk meningkatkan kinerja permintaan
Artikel ini mengasumsikan bahwa database Anda memiliki tabel lokal
Alih-alih tabel terkait (atau terlampir). Jika tabel Anda terhubung, ini
informasi masih berlaku. Namun, ada masalah tambahan yang mempengaruhi
permintaan kinerja dengan meja-meja yang terkait. Untuk informasi lebih lanjut tentang meningkatkan
kinerja dengan meja-meja yang terhubung, Anda dapat mencari Basis Pengetahuan Microsoft oleh
menggunakan string berikut:
ODBC dan mengoptimalkan dan tabel
Query Optimizer untuk Microsoft Jet database engine
Mesin database Jet berisi beberapa komponen, tetapi yang paling
komponen penting untuk pertanyaan (dan yang paling kompleks) adalah pengoptimasi. The
Pengoptimal berbasis biaya. Ini berarti bahwa Pengoptimal menetapkan biaya waktu untuk
masing-masing permintaan tugas dan kemudian memilih daftar paling murah tugas untuk melakukan
yang menghasilkan hasil tujuan yang ditetapkan. Semakin lama tugas yang diperlukan untuk melakukan,
adalah tugas yang lebih mahal.
Untuk memutuskan apa strategi permintaan untuk digunakan,
Optimizer menggunakan statistik. Faktor-faktor berikut adalah beberapa faktor
bahwa statistik ini didasarkan pada:
- Jumlah record di sebuah tabel
- Jumlah halaman data dalam tabel
- Lokasi tabel
- Apakah indeks hadir
- Bagaimana unik indeks yang
Berdasarkan statistik ini, Pengoptimal kemudian memilih yang terbaik
kueri internal strategi untuk berurusan dengan permintaan tertentu.
The
Statistik diperbarui setiap kali permintaan dikompilasi. Permintaan ditandai untuk
kompilasi saat Anda menyimpan perubahan untuk query (atau meja yang mendasari) dan
Ketika database dipadatkan. Jika permintaan ditandai untuk mengkompilasi,
kompilasi dan memperbarui statistik terjadi saat berikutnya kueri
menjalankan. Kompilasi biasanya mengambil dari satu detik untuk empat detik.
Jika
Anda menambahkan sejumlah besar catatan ke database Anda, Anda harus membuka dan
kemudian simpan pertanyaan Anda untuk mengkompilasi ulang permintaan. Sebagai contoh, jika Anda merancang dan
kemudian menguji permintaan dengan menggunakan seperangkat sampel data, Anda harus re-compile
permintaan setelah Catatan tambahan ditambahkan ke database. Ketika Anda melakukan ini, Anda
ingin untuk memastikan bahwa performa query yang optimal yang dicapai ketika Anda
aplikasi ini digunakan.
Catatan Anda tidak dapat melihat Jet database engine optimasi skema, dan Anda
tidak dapat menentukan cara mengoptimalkan permintaan. Namun, Anda dapat menggunakan Database
Documenter untuk menentukan apakah indeks hadir dan bagaimana unik indeks
adalah.
Untuk informasi lebih lanjut tentang masalah yang mungkin terjadi saat Anda menggunakan Database Documenter
pada Access 2000, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
207782
(http://support.microsoft.com/kb/207782/
)
ACC2000: Kesalahan menggunakan Database
Documenter jika objek terbuka
Waktu pertanyaan
Ada dua signifikan waktu pengukuran untuk permintaan Pilih:
- Waktu untuk menampilkan layar pertama data
- Waktu untuk mendapatkan catatan terakhir
Jika permintaan kembali hanya satu layar data, dua waktu
pengukuran yang sama. Jika permintaan kembali banyak catatan, waktu
pengukuran dapat sangat berbeda.
Jika kedua pengukuran
sama ketika Anda melihat permintaan pilih dalam Datasheet pandangan, Anda melihat sebuah layar data
dan jumlah catatan yang dikembalikan oleh permintaan, seperti "Catatan 1
dari
N." Jika itu lebih cepat untuk Jet database engine
untuk menampilkan layar pertama data dari untuk menyelesaikan pertanyaan dan kemudian
mengambil catatan terakhir, Anda melihat sebuah layar data tetapi tidak
N dalam "Catatan 1
N". The
N nilai kosong hingga permintaan selesai, atau
sampai Anda gulir turun terakhir catatan.
Perilaku ini adalah
hasil dari mesin database Jet memilih salah satu dari dua strategi kinerja:
- Menyelesaikan permintaan, dan kemudian menampilkan data
- Menampilkan data, dan kemudian lengkapi permintaan
Anda tidak dapat mengendalikan strategi yang digunakan. Jet database
mesin memilih strategi yang paling efisien.
Menganalisis kinerja
Jika Anda menggunakan Microsoft akses 7.0, Access 2000, Access 97
Akses 2002, atau akses 2003, Anda dapat menggunakan analisa kinerja untuk menganalisis
queries dalam database Anda. Karena analisis kinerja permintaan erat
terikat Jet database engine, kinerja Analyzer menunjukkan menambahkan
Indeks hanya ketika indeks akan benar-benar digunakan oleh Jet database engine
untuk mengoptimalkan query. Ini berarti bahwa Analyzer kinerja dapat memberikan
kinerja tips yang lebih spesifik untuk database Anda daripada umum
saran yang tercantum di bawah ini di bagian "Tips untuk meningkatkan kinerja permintaan".
Untuk menjalankan Analyzer kinerja di akses 7.0, di Access 97, dalam
Access 2000, pada 2002 akses, atau akses 2003, ikuti langkah berikut:
Pada
The
Alat menu, klik
Menganalisis, lalu klik
Kinerja.
Tips untuk meningkatkan kinerja permintaan
Untuk meningkatkan kinerja permintaan, mencoba tips ini:
- Kompak database Anda
Ketika Anda memadatkan Anda
database Anda dapat mempercepat pertanyaan. Ketika Anda memadatkan database Anda, catatan
tabel adalah direorganisasi sehingga catatan yang berada di dekat database
Halaman yang diperintahkan oleh primary key meja. Hal ini meningkatkan
kinerja scan berurutan catatan dalam tabel karena hanya
jumlah minimal database halaman sekarang harus dibaca untuk mengambil catatan
yang Anda inginkan. Setelah Anda kompak database Anda, jalankan setiap permintaan untuk mengkompilasi
permintaan sehingga setiap permintaan sekarang akan memiliki statistik diperbarui pada tabel. - Indeks lapangan
Indeks bidang apapun yang digunakan untuk mengatur
kriteria untuk permintaan bidang dan bidang indeks di kedua sisi bergabung. Atau,
membuat hubungan antara bidang ini. Ketika Anda membuat hubungan dengan integritas referensial ditegakkan, Jet database engine menciptakan indeks pada kunci asing jika tidak sudah ada. Jika tidak, Jet database engine menggunakan indeks yang ada.
Catatan Jet database engine secara otomatis mengoptimalkan permintaan yang
bergabung meja akses pada hard disk dan ODBC server meja jika akses
tabel adalah kecil dan jika bidang bergabung diindeks. Dalam kasus ini, akses
meningkatkan kinerja dengan meminta hanya data yang diperlukan dari server.
Pastikan bahwa tabel Anda bergabung dari berbagai sumber yang diindeks di bergabung
bidang. - Pilih jenis data terkecil yang
sesuai
Ketika Anda mendefinisikan sebuah field dalam tabel, pilih terkecil
tipe data yang sesuai untuk data di lapangan. Juga, pastikan bahwa
bidang yang Anda berencana untuk menggunakan di bergabung memiliki tipe data yang sama atau yang kompatibel
tipe data, seperti Autonumber dan nomor (jika FieldSize properti ini diset Bulat panjang). - Menambahkan hanya kolom yang harus Anda miliki
Ketika Anda
membuat permintaan, menambahkan hanya kolom yang harus Anda miliki. Dalam bidang yang digunakan
untuk menetapkan kriteria, klik untuk mengosongkan Tampilkan kotak centang Jika Anda melakukan
tidak ingin menampilkan bidang tersebut. - Simpan pernyataan SQL sebagai permintaan
Jika RecordSource properti untuk bentuk atau untuk laporan diatur untuk pernyataan SQL,
Simpan pernyataan SQL sebagai permintaan dan kemudian menetapkan RecordSource properti untuk nama query. - Menghindari kolom dihitung
Menghindari bidang dihitung dalam
subqueries. Jika Anda menambahkan permintaan yang berisi bidang dihitung untuk lain
permintaan, ekspresi di bidang dihitung dapat memperlambat kinerja di
tingkat atas permintaan. Dalam contoh berikut, permintaan Q1 digunakan sebagai masukan untuk
permintaan Q2: Q1: Pilih IIF([MyColumn]="Yes","Order Confirmed","Order Not Confirmed") AS X dari MyTable;
P2: Pilih * dari Q1 di mana X = "Order dikonfirmasi";
Karena JIKA ekspresi pada Q1 tidak dioptimalkan, Q2 juga tidak dapat
dioptimalkan. Jika ekspresi yang tidak dapat dioptimalkan bersarang di subquery,
semua permintaan tidak dapat dioptimalkan.
Cara alternatif untuk membangun
query adalah sebagai berikut: Q1: Pilih * dari MyTable di mana MyColumn = "Ya";
Jika ekspresi diperlukan dalam output, mencoba untuk menempatkan
ekspresi menguasai pada formulir atau laporan. Sebagai contoh, Anda dapat mengubah
permintaan sebelumnya untuk parameter permintaan yang meminta nilai MyColumn,
dan kemudian berdasarkan bentuk atau laporan query. Pada formulir atau laporan,
Anda kemudian dapat menambahkan kontrol dihitung yang menampilkan "Halo" atau "Goodbye"
tergantung pada nilai yang ada di MyColumn.
Membangun query sebagai
berikut:PARAMETER [untuk melihat dikonfirmasi pesanan, masukkan ya. Untuk melihat belum dikonfirmasi pesanan, masukkan nomor] Teks;
PILIH *
DARI MyTable
Di mana MyColumn = [untuk melihat dikonfirmasi pesanan, masukkan ya. Untuk melihat belum dikonfirmasi pesanan, masukkan nomor];
Mengendalikan dihitung pada formulir atau laporan, ketik:= IIF([MyColumn]="Yes","Order Confirmed","Order Not Confirmed")
- Menentukan grup oleh
Ketika Anda mengelompokkan Catatan oleh
nilai-nilai bidang bergabung, menentukan grup oleh bidang yang sama dalam satu
tabel sebagai kolom yang Anda adalah total (menghitung agregat pada). Untuk
misalnya, dalam database contoh Northwind.mdb, jika Anda membuat permintaan yang
Total kuantitas bidang dalam urutan rincian meja dan kemudian kelompok oleh
NomorPesanan, Anda dapat menentukan grup dengan bidang nomorPesanan dalam rincian pesanan
tabel. Jika Anda menetapkan grup oleh untuk bidang nomorPesanan di meja perintah,
Akses harus bergabung semua catatan pertama dan kemudian melakukan agregat, sebaliknya
melakukan agregat dan kemudian bergabung dengan hanya diperlukan bidang.
Untuk kecepatan yang lebih besar, menggunakan Group By pada bidang sesedikit mungkin.
Atau, menggunakan Pertama fungsi jika Anda bisa.
Jika permintaan total termasuk join,
mempertimbangkan pengelompokan catatan dalam satu permintaan dan kemudian menambahkan query ini untuk
memisahkan permintaan yang bergabung. Ketika Anda melakukan ini, kinerja mungkin
ditingkatkan dengan beberapa permintaan. - Menghindari permintaan ketat kriteria
Menghindari ketat
permintaan kriteria pada bidang dihitung dan non-diindeks bidang jika Anda bisa. Penggunaan
kriteria ungkapan yang Anda dapat mengoptimalkan. - Tes kinerja permintaan Anda di bidang yang digunakan dalam
bergabung antara tabel
Jika Anda menggunakan kriteria untuk membatasi nilai-nilai di
lapangan yang digunakan dalam bergabung antara tabel dengan satu-ke-banyak hubungan,
menguji apakah pertanyaan berjalan lebih cepat dengan kriteria yang diletakkan di sisi "satu"
atau di sisi "banyak" bergabung. Di beberapa permintaan, Anda mungkin menyadari lebih cepat
kinerja dengan menambahkan kriteria untuk bidang sisi "satu" bergabung
Alih-alih di "banyak" sisi bergabung. - Indeks semacam ladang
Indeks bidang yang Anda gunakan
untuk penyortiran. - Menggunakan meja membuat permintaan untuk membuat tabel
Jika Anda
data jarang perubahan, menggunakan meja membuat permintaan untuk membuat tabel dari permintaan Anda
hasil. Menggunakan tabel dihasilkan bukan pertanyaan sebagai dasar untuk Anda
bentuk, laporan, atau pertanyaan Anda yang lain. Pastikan bahwa Anda menambahkan indeks
sesuai dengan pedoman yang Anda baca di artikel ini. - Hindari menggunakan domain fungsi agregat
Hindari menggunakan
domain agregat fungsi, seperti DLookup fungsi untuk mengakses data dari tabel yang tidak dalam permintaan.
Domain fungsi agregat khusus untuk akses, dan ini berarti bahwa Jet
mesin database tidak mengoptimalkan permintaan yang menggunakan domain fungsi agregat.
Sebaliknya, menambahkan query tabel yang fungsi mengakses atau membuat
subquery. - Menggunakan kepala tetap kolom
Jika Anda membuat
crosstab permintaan, penggunaan tetap judul kolom bila memungkinkan. - Menggunakan operator
Penggunaan Antara...Dan operator, Dalam operator, dan = operator di bidang diindeks. - Mengoptimalkan kinerja pada server
Untuk sebagian besar update
permintaan terhadap sumber data ODBC, mengoptimalkan kinerja pada server oleh
pengaturan FailOnError properti untuk ya.
Untuk informasi lebih lanjut tentang mengoptimalkan kinerja di Microsoft Access 2000, klik
Microsoft akses bantuan pada
Bantuan menu, jenis
mengoptimalkan
kinerja di kantor asisten atau jawaban Wizard, dan kemudian klik
Mencari untuk melihat topik.
Untuk informasi lebih lanjut tentang cara mengoptimalkan performa
di Microsoft akses 2002, klik
Microsoft akses bantuan pada
Bantuan menu, jenis
Meningkatkan kinerja akses
database di kantor asisten atau jawaban Wizard, dan kemudian klik
Mencari untuk melihat topik.
Untuk informasi lebih lanjut tentang meningkatkan kinerja dalam akses
2003, klik
Microsoft Office akses bantuan pada
Bantuan menu, jenis
Meningkatkan kinerja akses database dalam
Mencari kotak di panel bantuan, dan kemudian klik
Mulai pencarian untuk melihat topik.
Untuk informasi lebih lanjut tentang menggunakan indeks di akses
2000, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
209564
(http://support.microsoft.com/kb/209564/
)
ACC2000: Indeks senyawa harus
membatasi field diindeks pertama
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See
Terms of Use
(http://go.microsoft.com/fwlink/?LinkId=151500)
for other considerations.
ID Artikel: 209126 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Berlaku bagi:
- Microsoft Office Access 2003
- Microsoft Access 2002 Standard Edition
- Microsoft Access 2000 Standard Edition
| kbquery kbhowto kbperformance kbinfo kbusage kbmt KB209126 KbMtid |
Penerjemahan MesinPENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:
209126
(http://support.microsoft.com/kb/209126/en-us/
)