總結MySQL建表、查詢優化的一些實用小技巧_MySQL教程
推薦:解析csv數據導入mysql的方法mysql自己有個csv引擎,可以通過這個引擎來實現將csv中的數據導入到mysql數據庫中,并且速度比通過php或是python寫的批處理程序快的多。 具體的實現代碼示例: 復制代碼 代碼如下: load data infile '/tmp/file.csv' into table _tablename (set character utf8) field
本篇文章是對MySQL建表以及查詢優化的一些實用小技巧進行了詳細的分析介紹,需要的朋友參考下MySQL建表階段是非常重要的一個環節,表結構的好壞、優劣直接影響著后續的管理維護,趕在明天上班前分享總結個人MySQL建表、MySQL查詢優化積累的一些實用小技巧。
技巧一、數據表冗余記錄添加時間與更新時間
我們用到的很多數據表大多情況下都會有表記錄的“添加時間 (add_time)”,我建議大家再新增一個記錄“更新時間(update_time)”字段,在我的工作里需要為市場部、運營部等建立各種報表,而很 多報表里的數據都是需要到大記錄表里去查詢的,如果直接查詢大表的話,查詢速度相當慢。那么,我們的解決辦法就是建立各種數據快照,數據快照都是通過腳本 定時跑的。假如,哪一天原始數據表出現了問題,那么快照數據也會有問題,這個時候我們的快照腳本就得重新跑一份修復好了的數據,這樣有了 update_time更新時間這個字段,我們就能很快定位記錄更新的時間。
技巧二、不要拋棄insert ignore into與replace into
大家肯定寫過一些 腳本循環將記錄插入到數據表,例如使用PHP腳本。如果期間的一條SQL插入失敗,那么后續的插入將終止,你可以在腳本里繞過這個插入錯誤,一個好的辦法 是使用ignore關鍵字來屏蔽插入錯誤。如果,你的數據表里已經存在有將要插入的相同記錄,那么這個時候就會產生插入報錯,使用 insert ignore into將繞開這個錯誤,繼續下一條記錄的插入。
如果你的表結構設計了唯一索引的話,那么使用replace into來更新你的數據表記錄再好不過了,尤其是你在寫一個腳本的時候,你就不需要在腳本里先查詢數據表是否存在該條記錄,如果存在,則更新;如果不存在 則插入。你可以直接使用replace into,它會自動到數據表檢測,如果在唯一索引字段存在該值,則會先刪除該條記錄,然后再插入新記錄;如果唯一索引字段不存在該值,則直接插入數據表, 簡單且非常實用。
技巧三、給你的表建立唯一索引
很多情況下建立表唯一索引,能給我們省下很多麻煩事,想上面說的 replace into就必須是有唯一索引,當然,很多人喜歡用到的自增主鍵ID盡管也是唯一索引,我建議是能在其他經常出現在where條件屁股后面的字段,并且值是 唯一的話可以加個索引甚至唯一索引,查詢速度將會提高很多。
說在最后:當然,insert ignore into與replace into大家要根據自己的需求來確定,不一定就適合你現在的需求;我只是提示大家還有這么些個實用的小知識大家可以靈活運用到項目里邊。
分享:綠色版mysql注冊卸載服務方法如果直接用綠色版的mysql,則下載后解壓,只需對目錄下的my.ini文件的basedir(mysql的基本目錄)和datadir(mysql數據目錄)指定就可以,如下所示。 #Path to installation directory. All paths are usually resolved relative to this. basedir=D:\MySQL Server 5.1/
- MSSQL清空日志刪除日志文件
- 關于數據庫中保留小數位的問題
- 解析mysql與Oracle update的區別
- mysql 導入導出數據庫以及函數、存儲過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內連接、全連接
- 解析:內聯,左外聯,右外聯,全連接,交叉連接的區別
- mysql出現“Incorrect key file for table”處理方法
- mysql重裝后出現亂碼設置為utf8可解決
- 淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
- 相關鏈接:
- 教程說明:
MySQL教程-總結MySQL建表、查詢優化的一些實用小技巧
。