目前有4張表:
一、用戶基礎資料表(每個用戶一條資料,mid不重復)
mid(用戶ID)
username(用戶名)
password(密碼)
gid(所屬地區ID,對應第三張表的gid)
type(用戶型別)
status(用戶狀態)
createtime(創建時間)
二、用戶詳細資訊表(每個用戶一條資料,mid不重復)
mid(用戶ID,對應第一張表的mid)
realname(真實姓名)
gender(性別)
nation(民族)
party(政治面貌)
education(學歷)
.....(等等50多項)
三、地區表(每個地區一條資料,gid不重復)
gid
guildname(地區名稱)
type(型別)
statue(狀態)
createtime(創建時間)
四、資料修改表
id(自增長ID)
mid(用戶id,對于第一張表的mid)
modifytype(修改資料型別:分別標記1-7的數字)
modifydata(修改資料)
modifystate(修改狀態:0未提交,1已提交待審核,2已審核)
modifytime(修改時間)
說明:每個用戶可能有N條資料,且狀態不一樣,比如mid為1的用戶,對4種型別的資料做了修改,那就有mid的4條資料(modifytype分別為1,2,3,4),狀態modifystate可能有1條是未提交0 ,2條可能是待審核1, 1條是已審核2。(如下圖)

現在的需求就是,這4張表聯合查詢,要求表1的部分欄位、表2的部分欄位、表3的guildname、表4的條件modifystate=1的所有欄位的,且id as 為moid,一起聯合查詢,還有要group by 表4的mid(因為一個用戶可能modifystate=1的有多條)。最后的資料出來后,有些用戶moid為空,有些用戶moid有資料,這樣可以判斷出來,哪些用戶有修改資料,哪些用戶沒有修改資料,然后就可以根據組合查詢的用戶mid+是否有過修改資料來進行排序。
目前做了兩個視圖,但是只要加入表4并group by 之后,效率很低。求教如何提升效率。謝謝
uj5u.com熱心網友回復:
以文本方式貼出(不要貼圖!)explain select ....
及
show index from
以供分析
uj5u.com熱心網友回復:
樓主給出具體的SQL、執行計劃、資料量和索引情況,具體參考#1的回復。uj5u.com熱心網友回復:
針對MySQL 資料庫的 SQL 調優工具并不多,但大多數這些工具都集中在執行計劃可視化或執行計劃分析上,如果您沒有深入的 SQL 調優知識,并且不愿意花費額外的精力來調整 SQL,那么這些工具對您來說作用不大。如果您渴望獲得提供一鍵式解決方案的工具,該工具無需干預即可自動調整 SQL 陳述句,Tosska SQL Tuning Expert for MySQL可能是您唯一的選擇。uj5u.com熱心網友回復:
謝謝大家,自己解決了一部分,去掉了不必要的欄位,且調整了索引。同時優化了PHP代碼,換了一個思路顯示資料。現在查詢速度提升了很多轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/23221.html
標籤:MySQL
上一篇:QT sqlite觸發器無法創建
