1 回答

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)
, ...
;
- 1 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報(bào)