1 回答

TA貢獻1895條經(jīng)驗 獲得超7個贊
為什么我們先添加timekey然后刪除它?將其添加到空表中速度很快,但是在填充后將其從表中刪除,這就像表的額外副本。如果我們不需要的話,那是不必要的工作。
我們可以GROUP BY對表達式執(zhí)行 a;該表達式不必出現(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(請注意,如果包含在 sql_mode 中,此查詢將導致錯誤;這將禁用允許查詢運行的 MySQL 特定擴展。)
如果沒有一些表定義(包括存儲引擎、列數(shù)據(jù)類型、索引)并且沒有 EXPLAIN 輸出,我們只是猜測。
但一些建議:
刪除正在填充的空表上的二級索引,并在表加載后添加它們。
我會避開工會。鑒于其中一個 SELECT 語句有一個謂詞,column_name而另一個 SELECT 語句有一個完全不同的列上的謂詞date,我們確實希望分隔 SELECT 語句。
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)注
- 146 瀏覽
添加回答
舉報