mysql中的優化, 簡單的說了一下垂直分表, 水平分表(有幾種模運算),讀寫分離.

1、mysql中的優化

where語句的優化html

1.儘可能避免在 where 子句中對字段進行表達式操做
select id from uinfo_jifen where jifen/60 > 10000;
優化後:
Select id from uinfo_jifen where jifen>600000;mysql

2.應儘可能避免在where子句中對字段進行函數操做,這將致使mysql放棄使用索引sql

select uid from imid where datediff(create_time,'2011-11-22')=0
優化後
select uid from imid where create_time> ='2011-11-21‘ and create_time<‘2011-11-23’;數據庫

優化Group By語句服務器

默認狀況下,MySQL 排序全部GROUP BY col1,col2,....。查詢的方法如同在查詢中指定ORDER BY col1,col2,...。若是顯式包括一個包含相同的列的ORDER BY子句,MySQL 能夠絕不減速地對它進行優化,儘管仍然進行排序。若是查詢包括GROUP BY 但你想要避免排序結果的消耗,你能夠指定ORDER BY NULL禁止排序。
 

優化Order by語句函數

在某些狀況中,MySQL 可使用一個索引來知足ORDER BY 子句,而不須要額外的排序。where 條件和order by 使用相同的索引,而且order by 的順序和索引順序相同,而且order by 的字段都是升序或者都是降序。
 

優化insert語句優化

若是你同時從同一客戶插入不少行,使用多個值表的INSERT 語句。這比使用分開 INSERT 語句快(在一些狀況中幾倍)。Insert into test values(1,2),(1,3),(1,4)…
 
 
2、垂直分表, 水平分表(有幾種模運算),讀寫分離.

垂直分表:ui

  把主碼和一些列放到一個表,而後把主碼和另外的列放到另外一個表中。
  若是一個表中某些列經常使用,而另一些列不經常使用,則能夠採用垂直分割,另外垂直分割可使得數據行變小,一個數據頁就能存放更多的數據,在查詢時就會減小I/O次數。其缺點是須要管理冗餘列,查詢全部數據須要join操做。spa

水平分割:htm

  根據一列或多列數據的值把數據行放到兩個獨立的表中。

  水平分割一般在下面的狀況下使用。
  • 表很大,分割後能夠下降在查詢時須要讀的數據和索引的頁數,同時也下降了索引的層數,提升查詢速度。
  • 表中的數據原本就有獨立性,例如表中分別記錄各個地區的數據或不一樣時期的數據,特別是有些數據經常使用,而另一些數據不經常使用。
  • 須要把數據存放到多個介質上。
  水平分割會給應用增長複雜度,它一般在查詢時須要多個表名,查詢全部數據須要union操做。在許多數據庫應用中,這種複雜性會超過它帶來的優勢,由於只 要索引關鍵字不大,則在索引用於查詢時,表中增長兩到三倍數據量,查詢時也就增長讀一個索引層的磁盤次數。

讀寫分離:

  一臺數據庫服務器,是對外提供增刪改業務的生產服務器;另外一臺數據庫服務器,主要進行讀的操做。

  主要經過RAID(磁盤陣列)把多塊獨立的硬盤(物理硬盤)按不一樣的方式組合起來造成一個硬盤組(邏輯硬盤)。

相關文章
相關標籤/搜索