簡體   English   中英

改善這個非常慢的MySQL SELECT

[英]Improve this very slow MySQL SELECT

我有一個非常慢的MySQL查詢,我想是因為所有的JOIN(看起來很復雜,但這是很多表的問題):

SELECT DISTINCT doctors.doc_id, 
    doctors.doc_user, 
    doctors.doc_first, 
    doctors.doc_last, 
    doctors.doc_email, 
    doctors.doc_notes, 
    titles.tit_name, 
    specializations.spe_name, 
    activities.act_name, 
    users.use_first, 
    users.use_last,
    (SELECT COUNT(*) FROM locations WHERE locations.loc_doctor = doctors.doc_id) AS loc_count,
    (SELECT COUNT(*) FROM reception WHERE reception.rec_doctor = doctors.doc_id) AS rec_count,
    (SELECT COUNT(*) FROM visits INNER JOIN reports ON visits.vis_report = reports.rep_id  WHERE visits.vis_doctor = doctors.doc_id AND reports.rep_user LIKE '%s') AS vis_count
FROM
    doctors
INNER JOIN titles ON titles.tit_id = doctors.doc_title
INNER JOIN specializations ON specializations.spe_id = doctors.doc_specialization
INNER JOIN activities ON activities.act_id = doctors.doc_activity
LEFT JOIN locations ON locations.loc_doctor = doctors.doc_id
INNER JOIN users ON doctors.doc_user = users.use_id
WHERE
    ((doctors.doc_last LIKE %s) OR (doctors.doc_first LIKE %s) OR (doctors.doc_email LIKE %s)) 
    AND doctors.doc_user LIKE %s 
    AND locations.loc_province LIKE %s 
    AND doctors.doc_specialization LIKE %s 
    AND doctors.doc_activity LIKE %s 
ORDER BY %s

所有%s都是sprintf()PHP函數中的參數
需要注意的最重要的事情是...我在MySQL上沒有索引! 我想我可以加快添加一些索引的過程...但是,什么地方? 有太多的聯接和搜索參數,令我困惑的是什么是有效的:-)

請你幫忙 提前致謝!

您可以在您使用在WHERE條件的列添加索引開始。

此外,您應該索引連接中使用的那些字段,即主鍵和外鍵列。

我建議這些指數逐漸嘗試將產生一個真正的性能提升。

此外,我發現您在單個查詢中獲取了太多數據。 如果確實不需要,則即使您進行了適當的索引編制,也可以將其分解為不同的報表和頁面(如果可能),該解決方案將無法很好地擴展,並且可能無法處理大量數據。

注意:您可能必須在通過'%'限定詞查詢的字段上創建全文索引。(即,使用LIKE運算符)

像運算符一樣慢。 這是關於應用索引和全文的討論

mysql像性能提升

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM