第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

提高涉及聯(lián)合的 MYSQL QUERY 的性能

提高涉及聯(lián)合的 MYSQL QUERY 的性能

Go
哆啦的時(shí)光機(jī) 2023-06-26 17:00:14
擁有一個(gè) Golang 實(shí)用程序,能夠減少包含歷史數(shù)據(jù)的表中每天的數(shù)據(jù)點(diǎn)。記錄范圍為每天 20 到 400 條記錄。總共至少有1億條記錄。該實(shí)用程序能夠在給定日期之前將其減少到每天 n 條記錄。(n 的范圍可以是每天 1 到 300 條記錄)我使用的方法如下:步驟1:創(chuàng)建表 main_table_tmp 像 main_table;第2步:更改表 main_table_tmp 添加列 timekey INT;步驟 3:INSERT INTO main_table_tmp SELECT * FROM (  SELECT *,FLOOR(UNIX_TIMESTAMP(column_name)/((1440/2)*60)) AS timekey   FROM main_table  WHERE column_name <= '2018-01-01'   GROUP BY timekey) m UNION ALL (SELECT * ,0 As timekey FROM main_table where column_name > 'date') ;步驟4:更改表 main_table_tmp 刪除列時(shí)間鍵;DROP TABLE 維護(hù)表;將表 maintable_tmp 重命名為 maintable;我正在使用 golang 實(shí)現(xiàn)上述目標(biāo)。func somefuncname(){  ----   ----  ----  q := "CREATE TABLE " + *tablename + "_tmp LIKE " + *tablename + ";"  rows, err := db.Query(q)  if err != nil {  fmt.Println(err)  }//--ALTER ADD timekey//--INSERT INTO SELECT *....//--ALTER DROP timekey ,DROP table and rename}當(dāng)前該查詢的響應(yīng)時(shí)間非常慢部分結(jié)果: 總記錄: 200 萬(wàn)條執(zhí)行時(shí)間: 180 秒這是在 16Gb RAM CPU 上部署在低等級(jí)系統(tǒng)上時(shí)非常慢我為解決此問(wèn)題所采取的步驟:查看了所有表的索引。嘗試刪除索引并運(yùn)行該實(shí)用程序。刪除索引使實(shí)用程序加快了 5 秒,但這也不算多。分階段執(zhí)行實(shí)用程序:如果總記錄超過(guò) 100 萬(wàn)條,則一次運(yùn)行 100 萬(wàn)條實(shí)用程序但畢竟這些努力看起來(lái)主要問(wèn)題在于查詢本身。只是速度不夠快。我只是需要一種方法來(lái)提高查詢效率任何幫助表示贊賞,謝謝大家?。?
查看完整描述

1 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

為什么我們先添加timekey然后刪除它?將其添加到空表中速度很快,但是在填充后將其從表中刪除,這就像表的額外副本。如果我們不需要的話,那是不必要的工作。


我們可以GROUP BY對(duì)表達(dá)式執(zhí)行 a;該表達(dá)式不必出現(xiàn)在 SELECT 列表中,例如:


SELECT t.*

  FROM main_table t

 WHERE t.column_name <= '2018-01-01'

 GROUP 

    BY FLOOR(UNIX_TIMESTAMP(t.column_name)/((1440/2)*60))

ONLY_FULL_GROUP_BY(請(qǐng)注意,如果包含在 sql_mode 中,此查詢將導(dǎo)致錯(cuò)誤;這將禁用允許查詢運(yùn)行的 MySQL 特定擴(kuò)展。)


如果沒(méi)有一些表定義(包括存儲(chǔ)引擎、列數(shù)據(jù)類型、索引)并且沒(méi)有 EXPLAIN 輸出,我們只是猜測(cè)。


但一些建議:


刪除正在填充的空表上的二級(jí)索引,并在表加載后添加它們。


我會(huì)避開工會(huì)。鑒于其中一個(gè) SELECT 語(yǔ)句有一個(gè)謂詞,column_name而另一個(gè) SELECT 語(yǔ)句有一個(gè)完全不同的列上的謂詞date,我們確實(shí)希望分隔 SELECT 語(yǔ)句。


CREATE TABLE main_table_tmp LIKE main_table

;


-- for performance, remove secondary indexes, leave just the cluster index

ALTER TABLE main_table_tmp 

    DROP INDEX noncluster_index_1

  , DROP INDEX noncluster_index_2

  , ...

;


-- for performance, have a suitable index available on main_table 

-- with `column_name` as the leading column

INSERT INTO main_table_tmp 

SELECT h.*

  FROM main_table h

 WHERE h.column_name <= '2018-01-01'

 GROUP 

    BY FLOOR(UNIX_TIMESTAMP(h.column_name)/((1440/2)*60))

;


-- for performance, have a suitable index available on main_table

-- with `date` as the leading column

INSERT INTO main_table_tmp

SELECT c.*

  FROM main_table

 WHERE c.date > '????-??-??'

;


-- add secondary indexes 

ALTER TABLE maint_table_tmp

    ADD UNIQUE INDEX noncluster_index_1 (fee,fi,fo)

  , ADD INDEX noncluster_index_2 (fum)

  , ...

;


查看完整回答
反對(duì) 回復(fù) 2023-06-26
  • 1 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)