mysql臨時表和檔案排序優化

2021-08-21 20:22:06 字數 1352 閱讀 6483

原來出現問題的語句:

explain  select   video.target,

video.state,

video.flag,

video.time_length,

video.upload_time,

video.cover_position,

video.click_count,

member.nickname

from

inner

join member on member.id= video.member_id

where video.display= 1

and video.game_id= '9930'

order

by video.`upload_time`

desc

limit 0,

20

慢查詢檢視執行計畫:出現了檔案排序和臨時表問題。

問題出現的原因:

mysql查詢存在直接關聯和非直接關聯的問題,這兩種查詢效率差別很大;(join member 的時候用的非直接關聯的video表去關聯,這往往會出現臨時表)

mysql排序盡量使用索引;

mysql多表關聯left join其他表的時候,如果以其他表的字段作為查詢條件都會產生臨時表;

mysql在非直接關聯的基礎上進行排序會很慢,需要進行優化;(用的是臨時表的upload_time進行排序,所以會慢)

解決方法:

把非關聯的表查詢條件改為子查詢,子查詢不在作為查詢條件

explain

select sql_no_cache video.target,

video.state,

video.flag,

video.time_length,

video.upload_time,

video.cover_position,

video.click_count,

(select nickname from

`member`

where id= video.`id`) as nickname #這部分代替原來的內連線查詢出來的暱稱

from

inner

where video.display= 1

and video.game_id= '9930'

order

bydesc #用了原表的條件排序

limit 0,

20

執行計畫:

MySQL臨時表的優化方案

mysql 是全球最受歡迎的開源資料庫,作為開源軟體組合 lamp linux apache mysql perl php python 中的重要一環,廣泛應用於各類應用。web2.0 時代,風靡全網的社群論壇軟體系統 discuz 和部落格平台 wordpress 均基於 mysql 實現底層架構...

mysql臨時表更新 MySql 臨時表

今天在專案中遇到乙個,當mysql的in語句中資料量很大時,建立乙個臨時表的例子。於是樓主整理了一下關於臨時表的知識,與大家分享一下 首先,臨時表只在當前連線可見,當關閉連線時,mysql會自動刪除表並釋放所有空間。因此在不同的連線中可以建立同名的臨時表,並且操作屬於本連線的臨時表。建立臨時表 cr...

mysql 臨時表 限制 Mysql臨時表

當你建立臨時表的時候,你可以使用temporary關鍵字。如 create temporary table tmp table name varchar 10 not null,passwd char 6 not null 或create temporary table if not exists ...