總結(jié)MySQL建表、查詢優(yōu)化的一些實(shí)用小技巧_MySQL教程
推薦:解析csv數(shù)據(jù)導(dǎo)入mysql的方法mysql自己有個(gè)csv引擎,可以通過這個(gè)引擎來實(shí)現(xiàn)將csv中的數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫中,并且速度比通過php或是python寫的批處理程序快的多。 具體的實(shí)現(xiàn)代碼示例: 復(fù)制代碼 代碼如下: load data infile '/tmp/file.csv' into table _tablename (set character utf8) field
本篇文章是對(duì)MySQL建表以及查詢優(yōu)化的一些實(shí)用小技巧進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下MySQL建表階段是非常重要的一個(gè)環(huán)節(jié),表結(jié)構(gòu)的好壞、優(yōu)劣直接影響著后續(xù)的管理維護(hù),趕在明天上班前分享總結(jié)個(gè)人MySQL建表、MySQL查詢優(yōu)化積累的一些實(shí)用小技巧。
技巧一、數(shù)據(jù)表冗余記錄添加時(shí)間與更新時(shí)間
我們用到的很多數(shù)據(jù)表大多情況下都會(huì)有表記錄的“添加時(shí)間 (add_time)”,我建議大家再新增一個(gè)記錄“更新時(shí)間(update_time)”字段,在我的工作里需要為市場(chǎng)部、運(yùn)營部等建立各種報(bào)表,而很 多報(bào)表里的數(shù)據(jù)都是需要到大記錄表里去查詢的,如果直接查詢大表的話,查詢速度相當(dāng)慢。那么,我們的解決辦法就是建立各種數(shù)據(jù)快照,數(shù)據(jù)快照都是通過腳本 定時(shí)跑的。假如,哪一天原始數(shù)據(jù)表出現(xiàn)了問題,那么快照數(shù)據(jù)也會(huì)有問題,這個(gè)時(shí)候我們的快照腳本就得重新跑一份修復(fù)好了的數(shù)據(jù),這樣有了 update_time更新時(shí)間這個(gè)字段,我們就能很快定位記錄更新的時(shí)間。
技巧二、不要拋棄insert ignore into與replace into
大家肯定寫過一些 腳本循環(huán)將記錄插入到數(shù)據(jù)表,例如使用PHP腳本。如果期間的一條SQL插入失敗,那么后續(xù)的插入將終止,你可以在腳本里繞過這個(gè)插入錯(cuò)誤,一個(gè)好的辦法 是使用ignore關(guān)鍵字來屏蔽插入錯(cuò)誤。如果,你的數(shù)據(jù)表里已經(jīng)存在有將要插入的相同記錄,那么這個(gè)時(shí)候就會(huì)產(chǎn)生插入報(bào)錯(cuò),使用 insert ignore into將繞開這個(gè)錯(cuò)誤,繼續(xù)下一條記錄的插入。
如果你的表結(jié)構(gòu)設(shè)計(jì)了唯一索引的話,那么使用replace into來更新你的數(shù)據(jù)表記錄再好不過了,尤其是你在寫一個(gè)腳本的時(shí)候,你就不需要在腳本里先查詢數(shù)據(jù)表是否存在該條記錄,如果存在,則更新;如果不存在 則插入。你可以直接使用replace into,它會(huì)自動(dòng)到數(shù)據(jù)表檢測(cè),如果在唯一索引字段存在該值,則會(huì)先刪除該條記錄,然后再插入新記錄;如果唯一索引字段不存在該值,則直接插入數(shù)據(jù)表, 簡(jiǎn)單且非常實(shí)用。
技巧三、給你的表建立唯一索引
很多情況下建立表唯一索引,能給我們省下很多麻煩事,想上面說的 replace into就必須是有唯一索引,當(dāng)然,很多人喜歡用到的自增主鍵ID盡管也是唯一索引,我建議是能在其他經(jīng)常出現(xiàn)在where條件屁股后面的字段,并且值是 唯一的話可以加個(gè)索引甚至唯一索引,查詢速度將會(huì)提高很多。
說在最后:當(dāng)然,insert ignore into與replace into大家要根據(jù)自己的需求來確定,不一定就適合你現(xiàn)在的需求;我只是提示大家還有這么些個(gè)實(shí)用的小知識(shí)大家可以靈活運(yùn)用到項(xiàng)目里邊。
分享:綠色版mysql注冊(cè)卸載服務(wù)方法如果直接用綠色版的mysql,則下載后解壓,只需對(duì)目錄下的my.ini文件的basedir(mysql的基本目錄)和datadir(mysql數(shù)據(jù)目錄)指定就可以,如下所示。 #Path to installation directory. All paths are usually resolved relative to this. basedir=D:\MySQL Server 5.1/
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫以及函數(shù)、存儲(chǔ)過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個(gè)MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- MySQL自增列插入0值的解決方案
- SQL查詢超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
- 網(wǎng)頁模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- 正確理解Mysql中的列索引和多列索引
- 30種mysql優(yōu)化sql語句查詢的方法
- mysql常用設(shè)置:字符集編碼、自動(dòng)完成(自動(dòng)提示)、監(jiān)聽外網(wǎng)ip
- Mysql 常見問題匯總
- 使用MySQL Slow Log來解決MySQL CPU占用高的問題
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫以及函數(shù)、存儲(chǔ)過程的介紹
- 使用java處理字符串公式運(yùn)算的方法
猜你也喜歡看這些
- 淺談SQL判斷是否存在
- 在SQL Server 2008中運(yùn)用表值參數(shù)(TVP)
- SQL Server 2000 中使用正則表達(dá)式
- SQL Server 游標(biāo)語句 聲明/打開/循環(huán)實(shí)例
- 四個(gè)關(guān)于SQL Server 2005數(shù)據(jù)庫鏡像的問題
- 淺談在SQL Server2005中進(jìn)行錯(cuò)誤捕捉
- 關(guān)于SQL Server數(shù)據(jù)庫維度表和事實(shí)表的概述
- 如何提高SQL語句性能
- 解讀SQL Server SA權(quán)限最新入侵方法
- SQL有外連接的時(shí)候注意過濾條件位置否則會(huì)導(dǎo)致網(wǎng)頁慢
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-總結(jié)MySQL建表、查詢優(yōu)化的一些實(shí)用小技巧
。