亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql in 集合查詢優化問題。

mysql in 集合查詢優化問題。

呼啦一陣風 2019-01-16 16:27:46
問題描述 1.mysql in 集合查詢 效率太低,時間過長。 問題出現的環境背景及自己嘗試過哪些方法 user_id 和 physicion 是此表關聯的用戶字段。因為要求上級可看到下級, (99, 166, 96)這個集合是下級用戶Id集合。in 查詢集合效率太低,不知道有和解決方法,集合是從另外一個數據庫查的所以無法關聯查詢。 相關代碼 // 請把代碼文本粘貼到下方(請勿用圖片代替代碼)SELECT a.id, a.case_id AS caseId, a.create_time AS createTime, a.case_state AS caseState, a.ealigner_treatment_plan AS ealignerTreatmentPlan, a.patient_name AS patientName, a.remarks, a.is_valid AS isValid, b.fileUrl FROM cm_caseinfo AS a LEFT JOIN cm_filesinfo AS b ON b.caseInfo_id = a.case_id AND b.fileTypeKey_id = 9 AND b.`status` = 1 WHERE ( a.user_id OR a.physicion IN (99, 166, 96) ) AND a.is_valid = 1 ORDER BY a.create_time DESC LIMIT 10 CREATE TABLE cm_caseinfo (id varchar(50) NOT NULL COMMENT '主鍵Id',address varchar(255) DEFAULT NULL COMMENT '地址',age int(11) DEFAULT NULL COMMENT '年齡(后臺計算)',birthday varchar(255) DEFAULT NULL COMMENT '生日必填',case_id varchar(255) NOT NULL COMMENT '病例號(時間+序列號)',case_state int(11) unsigned NOT NULL DEFAULT '8' COMMENT '病例狀態:0未完成,1正常,2刪除',create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',ealigner_treatment_plan int(11) DEFAULT '0' COMMENT '治療計劃(1,舌側,2透明,3唇側)',gender int(11) DEFAULT NULL COMMENT '性別(0,男,1,女)',patient_name varchar(255) DEFAULT NULL COMMENT '患者姓名',patient_name_pingyin varchar(255) DEFAULT NULL COMMENT '患者姓名的拼音',phone varchar(255) DEFAULT NULL COMMENT '患者電話(兼容之前數據庫)',physicion int(10) DEFAULT NULL COMMENT '主治醫生ID',profession varchar(255) DEFAULT NULL COMMENT '醫生的單位',treament_date datetime DEFAULT NULL COMMENT '治療日期',update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',user_id int(11) DEFAULT NULL COMMENT '操作人Id',remarks varchar(255) DEFAULT NULL COMMENT '備注',operator_ip varchar(255) DEFAULT NULL COMMENT '操作人IP',operator_id varchar(255) DEFAULT NULL COMMENT '操作人姓名',is_valid tinyint(11) DEFAULT '1',org_id varchar(20) DEFAULT NULL COMMENT '組織ID', PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; 你期待的結果是什么?實際看到的錯誤信息又是什么?
查看完整描述

1 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

首先啊,從你的建表語句中沒看到為user_id和physicion字段建立索引,你應該:

alter table cm_caseinfo add index `ix_user_id` on (`user_id`);
alter table cm_caseinfo add index `ix_physicion` on (`physicion`);

其次,你的select語句當中,通過『b.caseInfo_id = a.case_id 』來關聯了兩個表,這里也最好建立索引:

alter table cm_caseinfo add index `ix_case_id` on (`case_id`);
alter table cm_filesinfo add index `ix_caseInfo_id` on (`caseInfo_id`);

索引一旦建立,查詢起來會很快,并且在join當中如果能用啥建立過索引的關聯字段也會很快。

然后where語句當中的『( a.user_id OR a.physicion IN (99, 166, 96) ) 』這種寫法很糟糕,只能利用一個索引,應該寫成:

(a.user_id IN (99, 166, 96) OR a.physicion IN (99, 166, 96) ) 

希望能幫助到你。

查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 980 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號