程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 特定場景下SQL的優化,特定場景SQL優化

特定場景下SQL的優化,特定場景SQL優化

編輯:MySQL綜合教程

特定場景下SQL的優化,特定場景SQL優化


1.大表的數據修改最好分批處理。

1000萬行的記錄表中刪除更新100萬行記錄,一次只刪除或更新5000行數據。每批處理完成後,暫停幾秒中,進行同步處理。

2.如何修改大表的表結構。

對表的列的字段類型進行修改,改變字段寬度時還是會鎖表,無法解決主從數據庫延遲的問題。

解決辦法:

1.創建一個新表。

2.在老表上創建觸發器同步老表數據到新表。

3.同步老表數據到新表。

4.刪除老表。

5.將新表重新命名為老表。

可以使用命令,完成上面的工作:

pt-online-schema-change –alter=”modify c varchar(150) not null default ‘’” –user=root –password=root d=sakia, t=表名 –charset=utf8 –execute

3.優化not in 和 <> 的查詢

例子:

select customer_id ,firstname,email from customer where customer_id

not in (select customer_id from payment)

會多次查詢payment 表,如果payment表記錄很多效率將很低。

改寫後的sql

select a.customer_id ,a.firstname,a.email from customer a left join payment b

on a.customer_id=b.customer_id where b.customer_id is null;

4.對匯總表的優化查詢

select count(1) from product_comment where product_id=999;

創建匯總表:

create table product_comment_cnt (product_id ,cnt int);

select sum(cnt) from (

select cnt from product_comment_cnt where product_id=999 union all

select count(1) from product_comment where product_id =999 and timestr>date(now())

) a

每天定時更新匯總表,再加上當天的數據。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved