Saya memiliki situs WordPress dengan lebih dari 8000 posting dan setiap kali saya menambahkan yang baru situs menjadi tidak responsif. Saya memeriksa log query MySQL lambat dan menemukan bahwa ia melakukan pemilihan yang mengembalikan sebagian besar baris di tabel posting dan mengambil banyak waktu untuk mengeksekusi.
Ini adalah sebuah contoh:
Query_time: 149.702704
Lock_time: 0.000078
Rows_sent: 4699
Rows_examined: 9398
Rows_affected: 0
Rows_read: 4699
use 488726_wp;
SELECT `ID`, `post_author`, `post_date`, `post_date_gmt`, `post_status`, `post_name`, `post_modified`, `post_modified_gmt`, `post_parent`, `post_type`
FROM `wp_posts`
WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))
OR (post_status = 'publish' AND post_type = 'page') )
AND post_password=''
ORDER BY post_modified DESC;
Bagaimana saya bisa menemukan sumber pertanyaan ini?
mysql
performance
holiveira
sumber
sumber
Yang mungkin ingin Anda lakukan adalah melakukan EXPLAIN pada kueri seperti ini:
Ini akan mengungkapkan pola akses yang diambil oleh MySQL adalah mengumpulkan data yang Anda butuhkan.
Namun, hanya menatap klausa WHERE dan ORDER BY, saya ingin membuat saran berikut: buat indeks yang dapat membantu mempercepat kueri. Karena post_status dan post_type memiliki nilai statis dalam kueri dan post_modified memberikan urutan pengurutan untuk dua kolom tersebut, cobalah indeks ini:
Cobalah !!!
sumber
Masalah ini terkait dengan plugin Google XML Sitemaps; http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables
Anda dapat menggunakan opsi "Aktifkan pembuatan peta situs manual melalui GET Request". Dan memicu progres generasi secara manual.
sumber
Coba plugin berikut, Query Interface , yang akan memungkinkan Anda menampilkan kueri serta memberi Anda antarmuka di mana Anda juga dapat memeriksa apa yang diambil oleh kueri dengan memeriksa indeks atau penjelasannya.
sumber