1、單表千萬級數據量 子查詢 where in 要比 where exists 快(親測查詢時間差了100倍)
2、需要對datetime類型進行group by時(眾所周知,函數不走索引),把日期的值拆分,比如要按日進行分組,拆分成 年、月、日字段,類型分別用smallint、tinyint、tinyint,建立復合索引(Year,Month,Day)
3、數據量不大的臨時表的存儲引擎用engine=MEMORY ,優化效果很明顯。數據量太大的不建議,因為很吃內存,內存不夠數據可能會丟失數據或者中斷存儲過程
4、truncate是先執行drop操作,然后再執行create操作,執行完成后會恢復初始的表空間。(找資料時看到有文章說對於臨時表要先truncate再drop,差點被坑死,故有此一記)
-------------------------------------------后續------------------------------------------------------
到生產環境給表加索引后,過了一晚數據庫出故障自動關閉了。正在查找原因。。。
原因大概找到了,有一個作業每10分鍾跑一次,作用是從千萬級數據量單表處查詢數據然后插入到另一個表,這個作業跑一次耗時大於40分鍾,跑到中途還報錯退出了。。。
然后千萬級數據量單表添加字段后也沒有初始化好,添加索引的字段存在null值,導致死鎖的發生。不斷被阻塞,最后導致mysql崩潰了。