sql優化操作

2021-07-16 09:45:58 字數 2472 閱讀 7049

insert優化:

1,當同乙個使用者插入很多行的時候,應該盡量使用多個表的insert語句,這種方式將大大減少客戶端與資料庫之間的連線,關閉等等消耗,因為每一次插入資料都會執行連線資料庫,關閉資料庫等等操作;如下:

insert into test valus(1,2),(3,4),(5,6),(7,8)................

2,如果是不同的使用者插入很多行,可以使用insert delayed 語句得到更高的速度,該引數表示立刻執行,這樣就會把所有的插入資料放在記憶體的佇列中,並沒有真正地寫入磁碟中,而是用low_priority恰好相反,在所有的使用者對錶的讀寫完成後才會進行插入;

3,將索引檔案和資料檔案分在不同的·1磁碟上存放;

order by 優化:

1,可以在order by 欄位上建立索引,這樣,order by效率就會提高;

2,如果乙個sql語句裡面含有where 條件還有order by 條件的話,可以將where條件的字段和order by 條件的字段做乙個聯合索引;

但是如果是where 條件裡面是in某些值的話,不能實現聯合索引;

3,如果where條件加上多個order by條件可以在where條件和多個order by 上建立索引;

group by 優化:

如果group by 僅僅是為了獲取符合條件的唯一資料,而不做排序的話,可以考慮使用 group by ** order by null 效率會高很多;

巢狀查詢優化:

很多時候對於一些子查詢可以使用join查詢來代替,如select * from ticket where id in (select ticketid from scenery) 可以使用select * from ticket left join scenery on ticket.id = scenery.ticketid where scenery.ticketid is null;聯表查詢會比子查詢效率高很多;

or條件查詢:

對於or條件查詢,如果要利用索引,則or之間的每個條件列都必須使用索引,如果沒有索引,應該考慮增加索引;

優化分頁查詢:

1,分頁查詢其實是乙個很消耗資源的操作,因為如同下面的分頁操作,limit 100,10,這樣的排序操作會首先掃瞄前面的100條資料,然後不使用,等著下面的10條資料;所以有時候分頁操作可以考慮其他的思路,比如select id,name from ticket  order by createdtime limit 100,10 可以考慮用下面的語句更換select t.id,t.name from ticket t inner join (select * from id from ticket order by createdtime limit 100,10)b on a.id = b.id;這種語句可以減少可能少的資料;

臨時表的使用:

1,善於使用mysql臨時表,當我們的sql語句裡面含有group by 和 order by 並且兩個欄位不一樣的時候,使用臨時表

2,在join查詢的時候 在where條件或者order by ,group by 的條件不是聯表的第乙個表的列的時候應該使用臨時表;

3,order by中使用了distinct關鍵字 ordery by distinct(price)時使用臨時表;

4,select語句中指定了sql_small_result關鍵字 sql_small_result的意思就是告訴mysql,結果會很小,請直接使用記憶體臨時表,不需要使用索引排序 sql_small_result必須和group by、distinct或distinctrow一起使用

5,表包含text或者blob列可以考慮使用磁碟臨時表;

1,可以使用use index 寫在查詢語句的後面來提示你希望該sql使用什麼樣的索引列表,就可以讓sql優先考慮用這個索引。

select *** from table use index(key_list)] where ……對於這個key_list 可以是各種單一索引,也可以是復合索引;

2,可以使用ignore index 寫在查詢語句的後面來提示你忽略該sql使用什麼樣的索引列表,就可以讓sql不再考慮他的索引。

select *** from table ignore index(key_list)] where ……對於這個key_list 可以是各種單一索引,也可以是復合索引;

3,可以使用force index 寫在查詢語句的後面來提示你強制該sql使用什麼樣的索引,就可以讓sql不再考慮他的索引。

select *** from table force index(key_list)] where ……對於這個key_list 可以是各種單一索引,也可以是復合索引;

sql優化的操作

今天公司開了個會,具體的是乙個技術交流會,主要針對的sql優化這方面的,還真是讓學到了不少 主要有下面這些 left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。左 外 連線,左表 a table 的記錄將會全部表示出來,而右表 b table 只會顯示符...

SQL優化之資料復用操作

前言 週末加班身心倦,枯心無意部落格編,昨天誓言日一篇,今朝抽空把坑填 正文 ok,廢話不多說,先讓博主講一哈業務場景 我將可愛美麗的產品經理提出的需求,概括之為同資料庫中把一張a表中資料復用到另一張b表,並根據c表的某些欄位來確定b表的某些字段值 實際上,這個功能有多種實現方式,比較容易想到的是第...

SQL操作符的優化

in 操作符 用in寫出來的sql的優點是比較容易寫及清晰易懂,這比較適合現代軟體開發的風格。但是用in的sql效能總是比較低的,從oracle執行的步驟來分析用in的sql與不用in的sql有以下區別 oracle試圖將其轉換成多個表的連線,如果轉換不成功則先執行in裡面的子查詢,再查詢外層的表記...