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


一、mysql中的優化

where語句的優化

1.盡量避免在 where 子句中對字段進行表達式操作
select id from uinfo_jifen where jifen/60 > 10000;
優化后:
Select id from uinfo_jifen where jifen>600000;

2.應盡量避免在where子句中對字段進行函數操作,這將導致mysql放棄使用索引

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)…
 
 
二、垂直分表, 水平分表(有幾種模運算),讀寫分離.

垂直分表:

  把主碼和一些列放到一個表,然后把主碼和另外的列放到另一個表中。
  如果一個表中某些列常用,而另外一些列不常用,則可以采用垂直分割,另外垂直分割可以使得數據行變小,一個數據頁就能存放更多的數據,在查詢時就會減少I/O次數。其缺點是需要管理冗余列,查詢所有數據需要join操作。

水平分割:

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

  水平分割通常在下面的情況下使用。
  • 表很大,分割后可以降低在查詢時需要讀的數據和索引的頁數,同時也降低了索引的層數,提高查詢速度。
  • 表中的數據本來就有獨立性,例如表中分別記錄各個地區的數據或不同時期的數據,特別是有些數據常用,而另外一些數據不常用。
  • 需要把數據存放到多個介質上。
  水平分割會給應用增加復雜度,它通常在查詢時需要多個表名,查詢所有數據需要union操作。在許多數據庫應用中,這種復雜性會超過它帶來的優點,因為只 要索引關鍵字不大,則在索引用於查詢時,表中增加兩到三倍數據量,查詢時也就增加讀一個索引層的磁盤次數。

讀寫分離:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM