公司生產上面有一張表,裡面資料有:3486764條,每次想去查詢最新的幾條資料時總是很慢,以下為使用的語句:
select*from txn_fin_txn_log t order
by t.id desc;
因為有order by語句會很慢,查詢出來將近1分鐘才能出來,有時候更長
經過腦海裡想了之後,記得以前有位大師(具體記不清是哪位大師)有過乙個案例,他對大資料查詢時,先將其中最大的主鍵id查詢出來,再做進一步處理,以下為我寫的的sql:
select*from txn_fin_txn_log t where t.id >
(
select
max(s.id) -
1000000
from
txn_fin_txn_log s
) order
by id desc;
此時查詢100w條資料的最新資料0.547秒搞定,真是差別太大了。
後記:現在終於為何大師會先將表的主鍵id查詢出來,再進行進一步查詢,可能這種方案在對資料量比較少時,根本沒有任何好處,反而工作量還多了,但是對大資料就不一定了;這個需要有些前提,id是遞增的,而且查詢的範圍要控制的比較好,目前想到的分表是乙個比較好的方法可以解決此問題
總結:任何程式沒有絕對的對與錯,只有相對的對與錯,在適當的時候用適當的方法才是更好的;沒有最好,只有更好!
快速複製一張大表討論
有這樣的一類需求,快速複製一張表,而這張表的資料量又非常的大。比方說本來是分割槽表,要把它重新變成非分割槽表,怎麼能夠快速的完成這樣的操作呢?我下面給出2種大致的方法 第一,就是利用ctas方式來建立一張新錶,當然要想加快速度,在資料庫不是force logging的前提下,可以使用nologgin...
同步一張大表技術實現方案
目錄 1 背景 2 技術方案 3 技術方案修正 3.2 改寫分頁sql 4 參考資料 表中有乙個主鍵字段,主鍵id是有時間特性,按照時間公升序增長的,可以認為id是雪花演算法生成的id,目前表中有1億條資料,我們需要把這1億條資料同步到es中。我們將全表資料看成是乙個大的資料集,從邏輯上進行分頁,每...
mysq優化之(快速複製一張大資料的表)
一千萬條資料只花了兩分多鐘,這裡忘記截圖了 關閉了自動提交 關閉了唯一性檢查 load比傳統的insert效率高很多 蠕蟲複製500萬條資料只要1分多鐘的優化方式 innodb儲存引擎 關閉自動提交 set autocommit 0 關閉唯一性檢查 set unique checks 0 導完資料記...