1樓:註冊號糾結啊
從explain開始說起吧,很顯然第乙個sql語句。
壓根沒用任何索引(key列內什麼都沒有)!第二個倒是用到索引,卻是主鍵。
索引,並非你新增的fulltext索引!
接下來,分析下原因:
sql1:執行步驟:先s_a和s_a_t兩表笛卡爾集,然後篩選滿足on條件的,接著在從結果集中篩選滿足where字句的;該過程中處理的記錄條目為69*105479,並且未用到任何索引,未用到的原因可能是你先定義了乙個複合索引a_concent_split(a_title_split,a_content_split),然後又定義了乙個a_content_split2(a_content_split),當引擎執行查詢優化時候會先用到a_content_split,可是又由於複合索引是從最左邊開始(不能跳過第乙個欄位),而你卻忽略了a_title_split欄位,故未能正常使用索引。
sql2:執行步驟:先呼叫where字句對s_a表進行篩選形成新的s_a表,然後與s_a_t表笛卡爾積。
再利用on字句篩選,最後再次利用where字句形成最終結果集;經吵蔽世過第乙個where,該過程處理結果集會大幅少於sql1,並且該過程還用到了主鍵索引。你所設定的fulltext索引再次沒有用到,原因是like字句中開始部分為模糊匹配%時候用不了全文索引,這與fulltext儲存機制有關。
另,你說的刪除速度慢,原因:設定fulltext欄位設定太多,fulltext索引在更新刪除大量資料時候,需要同步更改索引,你的三個fulltext壓力太大!
改進方法:1、刪除a_content_split索引重試 2、在刪除時候開啟delay_key_write變數。
有關fulltext比較複雜,用的時公升肢候要謹慎設定,還有很多引數也對其有並蠢影響。
另外sql語句中外連線有關on where字句也是個比較繞的地方,兩者你都佔了,唉,所以我寫的略複雜,前天看到該問題,思忖兩天這才作答。
望有結果了予以回覆交流!
2樓:網友
涉及到中文索引時,使用mysql自帶的索引在對中文索引時會蔽棗有瓶頸的 建議使用sphinx 等全文索引引擎,同時在查詢時含頌避免使用* 而談並鄭使用具體的查詢欄位代替*, mysql的效能優化有很多中方式。
對資料庫有大量資料的讀寫時,使用讀寫分離和資料庫資料同步來實現資料的讀和寫。
mysql中like查詢速度慢的問題
3樓:愛可生雲資料庫
子查詢優化策略。
對於不同型別的子查詢,優化器會選擇不同的策略。
1. 對於 in、=any 子查詢,優化器有如下策略選擇:
semijoin
materialization
exists
2. 對於 not in、<>all 子查詢,優化器有如下策略選擇:
materialization
exists
3. 對於 derived 派生表,優化器有如下策略選擇:
derived_merge,將派生表合併到外部查詢中( 引入 );
將派生表物化為內部臨時表,再用於外部查詢。
注意:update 和 delete 語句中子查詢不能使用 semijoin、materialization 優化策略。
4樓:網友
試試在儲存過程裡設定乙個專用查詢看看,應該能快些。
5樓:網友
這個 用了 %xx% 的模糊查詢 很難走索引。
所以語句本身無法優化。。。
mysql 無法啟動服務,MYSQL 無法啟動服務
啟動 mysql 的服務步鄹 在開始選單欄裡 附件 命令提示符 右鍵選擇管理員方式執行 net start 資料庫名 這是啟動服務命令 例如 net start mysql56 net stop 資料庫名 這是關閉服務命令 例如 net stop mysql56 資料庫名 是自己安裝時取的名字!my...
mysql怎麼執行儲存過程,mysql怎麼執行一個儲存過程
給你個例子 drop procedure if exists call proc temp delimiter 儲存過程從 開始 create procedure proc temp in startdate varchar 20 設定傳入的變數,沒有可以不要傳 in enddate varchar...
mysql服務啟動不了,下面是mysql的錯誤日誌
裝了一個oa管理軟體,管理有資料安裝,當時沒注意,結果在用mysql的時候,無法啟動服務,感內覺就是當時安裝了這個容oa管理軟體的資料庫的錯吧 解除安裝軟體mysql 登錄檔清理mysql 4複製保留data檔案下面的幾個庫到桌面,刪除c盤的mysql,5然後就開始安裝吧,應該不會報錯了,然後在把放...