mysql千萬級數據優化查詢


我們在做一個項目,一個網站或一個app時,用戶量巨增,當使用的mysql數據庫中的表數據達到千萬級時,可以從以下方面考濾優化:

  1、在設計數據庫表的時候就要考慮到優化

  2、查詢sql語句上的優化

  3、從數據庫設計上進行結大框架的設計:如分區、分表、分庫

 

 

1、在設計數據庫表的時候就要考慮到優化

  1、盡可能使用not null定義字段,避免null值字段出現,null值會占用額外的索引空間

  2、使用固定長度的字段類型如char而不是varchar

  3、添加索引,在查詢頻繁的字段上加索引,如在where,group by, order by,on中出現的字段加索引

  4、字符字段只建立前綴索引,字符字段最好不要做主鍵

 

 

 

2、查詢sql語句上的優化

  1、不要使用select * 查詢,將要查找的字段寫出來

  2、使用join來代替子查詢

  3、使用limit 對查詢結果的記錄進行限定,千萬級別的數據太多,后面的數據沒必要查出來

  4、OR改寫成IN:因為OR的效率是n級別,IN的效率是log(n)級別

  5、少使用觸發器和函數,可在應用程序代碼實現

  6、也盡量少用join

  7、盡量避免在where子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描

  8、列表數據不要拿全表的數據,要使用limit 來分頁

 

  來說說MySql的引擎:

    目前廣泛使用的是MyISAM和InnoDB兩種引擎:

      MyISAM引擎,MySQL5.1之前版本默認引擎,它的特點是:不支持行鎖,不支持事務,不支持外鍵

 

      InnoDB引擎,MySQL5.5后默認引擎,它的特點:支持行鎖,采用MVCC來支持高並發,支持事務,支持外鍵,不支持全文索引

 

  

  分區:

      分區我不太明白,沒怎么看懂

 

  分表:

    分表就是把一張超多數據的表,分成多張表,把一次查詢,分成多次查詢,然后把結果組合返回給用戶。

 

    分表:又有兩種方式,分為垂直拆分和水平拆分,通常以某個字段做拆分項,比如以id字段拆分為100張表:表名為tableName_id%100

    分表只適合開發初期做好分表處理,不適合應用上線后再做修改,成本太高。

 

 

  分庫:

    分庫:就是把一個數據庫分成多個,然后做讀寫分離。

 

  有錢的話,使用其他方法,阿里雲數據庫POLARDB,阿里雲OcenanBase (淘寶使用,扛得住雙十一),阿里雲HybridDB for MySQL (原PetaData)  ,騰訊雲數據庫:騰訊雲DCDB等等

 

 

 

另一種情況:數據量過億

  數據量過億只能使用傳說中的大數據了。(做了這么多年開發,從來沒接觸過這玩意,可能都沒進什么大公司的原因吧)

  hadoop家族,(具體怎么玩的暫時還不知道)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

。。。


免責聲明!

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



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