mysql 最佳化,mysql

來源:互聯網
上載者:User

mysql 最佳化,mysql

mysql 最佳化(linux環境下)

方法1:添加sql日誌,定位具體查詢慢的語句

1,首先是在mysql設定檔中添加逾時控制,在mysqld下面添加2s逾時:

vi /etc/my.cnf

                                                        

2,重啟mysql,設定日誌顯示為on,查看slow_query_log可以看到顯示為on了。

3,接著執行一條時間查過2s的sql,然後查看記錄檔,可以看到如下的記錄,接下來我們可以通過日誌來進行最佳化了。

方法2:建立分區表。

在實際的項目開始的時候,一般不會特意去建立分區表,當項目運行一段時間後,具體定位到資料量大的表時可以考慮分區:RANGE,LIST,HASH,KEY。在實際情況當中一般是按照時間的range進行分區,下面是實際情況當中給表添加按照月的分區的sql。

alter tableWD_EnergyMeasure_His PARTITION by range(TO_DAYS(datRecTime))

(

PARTITIONp20131001 VALUES LESS THAN(TO_DAYS('2013-10-01 00:00:00')),

PARTITIONp20131101 VALUES LESS THAN(TO_DAYS('2013-11-01 00:00:00')),

PARTITIONp20131201 VALUES LESS THAN(TO_DAYS('2013-12-01 00:00:00')),

PARTITIONp20140101 VALUES LESS THAN(TO_DAYS('2014-1-01 00:00:00')),

PARTITIONp20140201 VALUES LESS THAN(TO_DAYS('2014-2-01 00:00:00')),

PARTITIONp20140301 VALUES LESS THAN(TO_DAYS('2014-3-01 00:00:00')),

PARTITIONp20140401 VALUES LESS THAN(TO_DAYS('2014-4-01 00:00:00')),

PARTITIONp20140501 VALUES LESS THAN(TO_DAYS('2014-5-01 00:00:00')),

PARTITION p20140601VALUES LESS THAN(TO_DAYS('2014-6-01 00:00:00')),

PARTITIONp20140701 VALUES LESS THAN(TO_DAYS('2014-7-01 00:00:00')),

PARTITIONp20140801 VALUES LESS THAN(TO_DAYS('2014-8-01 00:00:00')),

PARTITIONp20140901 VALUES LESS THAN(TO_DAYS('2014-9-01 00:00:00')),

PARTITIONp20141001 VALUES LESS THAN(TO_DAYS('2014-10-01 00:00:00')),

PARTITIONp20141101 VALUES LESS THAN(TO_DAYS('2014-11-01 00:00:00')),

PARTITIONp20141201 VALUES LESS THAN(TO_DAYS('2014-12-01 00:00:00'))

);

方法3:建立索引。

建立索引一般是老生常談的技術,主鍵一般是索引,我們也可以在經常使用的欄位上建立聯合索引。

方法4:建立主從分區資料庫

主要資料庫用於資料的插入刪除修改等操作,從資料庫主要用於資料的查詢操作,這樣可以避免在對資料進行大量修改的時候遇到比較耗時的查詢導致卡死的問題。主從資料庫的建立以及Database Backup的方法其他幾篇文章當中都也涉及。

方法5:調整資料庫參數配置

 


mysql性可以最佳化,歡迎

你給的資訊基本沒用,你沒說你資料庫的應用類型,以及你運營環境

設定檔基本不用改動,具體問題具體微調,他不會對資料庫最佳化起明顯作用

最佳化一般分一下幾個:
1.儲存引擎的選擇。高並發,update,insert較多、切需要交易處理適用 innodb;select為主用myisam;通常所有的表會使用相同的引擎,便於維護
2.根據資料量、cpu、記憶體、磁碟i/o開銷可以選擇分表、分庫、主從負載
3.最關鍵的就是sql和索引了,配合適當的索引,寫出高效的sql是最佳化的基本

最佳化是一個調試的過程,沒有1個通用的模式,要從實際情況作合理選擇
 
MySQL查詢最佳化

select product_id, sum(stock_amount) as stock_amount, sum(stock_branch) as stock_branch from stock_details where product_id in(很多,但是一般不會超過1000) group by product_id

我不是很建議用 where product_id in(很多,但是一般不會超過1000)
這種的方式,這樣速度會比較慢,如果考慮到最佳化一般都會用
where (表A.Product_ID=表B.Product_ID)

另:Sum()執行的時間可能比較長,建議你這個表平時做一下月結或者年結之類的處理,這種結算型的記錄可以用某個欄位打上標記,Sum的時候就以最後一次結算的記錄往下Sum。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.