mysql普通标转分区表_MySQL分区表到普通表互转
由于最近總有人抱怨,數據遷移后執行SQL變慢,經過查看原來是分區導致的問題。原分區根據按月設置RANGE分區,
看到這圖的時候也許有人就會發現問題.......
業務查詢SQL:
從SQL上看 執行計劃確實是走了分區,但為什么沒有命中索引呢,在圖1的里有聯合索引(idx_reportDate_groupID_shopID_saasOrderKey)
##解決問題思路
1、若強制指定走索引,確實是快的,掃描的行數也掃了
但由于業務修改比較麻煩,被要求要和其他庫統一索引,繼續不管....找問題先......
解決問題2:
猜測可能是表統計信息和碎片引起的,通過dump 還原操作,結果還是一樣沒解決問題......
解決問題3:
SQL查詢1號到10號跨的時間段比較長,難道是優化器問題.....理論了解不多....繼續找問題
先把SQL 簡單化查詢操作 如select * from ....操作
發現效果還不錯,此時修改查詢時間范圍。按業務查詢的SQL看看
發現問題了,按理應該是在P27分區,怎么掃了這么多分區,這就能和第1圖定義的分區有關系了,定義分區出了問題,到這算真正找到問題了。
開始解決問題:
目前應該想著怎么對3000W 表重構分區,而且不能刪除原來數據都要保留著
方法1:
對于小表執行ALTER 操作:alter table table_name remove partitioning; ?##移除分區,鎖表
線上可以使用pt-osc工具來移除分區,不影響業務
pt-online-schema-change -u load_data -h 192.168.21.113 -p root123 -P 3306 --alter=" REMOVE PARTITIONING" D=test,t=tbl_saas_order_food --charset=utf8 --no-version-check ?--statistics --critical-load="Threads_running:200" --max-load="Threads_running=25" --print --execute
發現一移除分區查詢瞬間變快
圖索引剛加,在沒這個索引 也可使用令一索引
重構分區:
小表自行alter table tabe_name?PARTITION BY range(sid)(PARTITION p1512 VALUES LESS THAN (20160101),
PARTITION p1601 VALUES LESS THAN (20160201),.........,PARTITION p888666 VALUES LESS THAN MAXVALUE)
大表:PT-OSC,如圖
重構分區后,執行計劃
其他驗證,是否指定分區:
總結
以上是生活随笔為你收集整理的mysql普通标转分区表_MySQL分区表到普通表互转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql查找最高分最低分_sql查询最
- 下一篇: ubuntu 新增mysql用户_Ubu