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裡面的子查詢,再查詢外層的表記...