MySQL SQL語句優(yōu)化的10條建議
更新時(shí)間:2014年03月03日 15:12:24 作者:
這篇文章主要介紹了MySQL中SQL語句優(yōu)化需要注意的10點(diǎn),,特別是大型高并發(fā)網(wǎng)站,需要的朋友可以參考下
1.將經(jīng)常要用到的字段(比如經(jīng)常要用這些字段來排序,或者用來做搜索),則最好將這些字段設(shè)為索引。
2.字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。
3.當(dāng)然無可避免某些字段會用到text ,varchar等字符類型,最好將text字段的單獨(dú)出另外一個(gè)表出來(用主鍵關(guān)聯(lián)好)
4.字段的類型,以及長度,是一個(gè)很考究開發(fā)者優(yōu)化功力的一個(gè)方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時(shí),點(diǎn)擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。
5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號!同理,只要一行數(shù)據(jù)時(shí)盡量使用 LIMIT 1
6.絕對不要輕易用order by rand() ,很可能會導(dǎo)致mysql的災(zāi)難!!
7.每個(gè)表都應(yīng)該設(shè)置一個(gè)ID主鍵,最好的是一個(gè)INT型,并且設(shè)置上自動增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事?。?BR>8.拆分大的 DELETE 或 INSERT 語句。因?yàn)檫@兩個(gè)操作是會鎖表的,表一鎖住了,別的操作都進(jìn)不來了,就我來說 有時(shí)候我寧愿用for循環(huán)來一個(gè)個(gè)執(zhí)行這些操作。
9.不要用永久鏈接 mysql_pconnect();除非你真的非??隙愕某绦虿粫l(fā)生意外,不然很可能也會導(dǎo)致你的mysql死掉。
10.永遠(yuǎn)別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個(gè)表的語句,只會讓人覺得很不靠譜。
2.字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。
3.當(dāng)然無可避免某些字段會用到text ,varchar等字符類型,最好將text字段的單獨(dú)出另外一個(gè)表出來(用主鍵關(guān)聯(lián)好)
4.字段的類型,以及長度,是一個(gè)很考究開發(fā)者優(yōu)化功力的一個(gè)方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時(shí),點(diǎn)擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。
5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號!同理,只要一行數(shù)據(jù)時(shí)盡量使用 LIMIT 1
6.絕對不要輕易用order by rand() ,很可能會導(dǎo)致mysql的災(zāi)難!!
7.每個(gè)表都應(yīng)該設(shè)置一個(gè)ID主鍵,最好的是一個(gè)INT型,并且設(shè)置上自動增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事?。?BR>8.拆分大的 DELETE 或 INSERT 語句。因?yàn)檫@兩個(gè)操作是會鎖表的,表一鎖住了,別的操作都進(jìn)不來了,就我來說 有時(shí)候我寧愿用for循環(huán)來一個(gè)個(gè)執(zhí)行這些操作。
9.不要用永久鏈接 mysql_pconnect();除非你真的非??隙愕某绦虿粫l(fā)生意外,不然很可能也會導(dǎo)致你的mysql死掉。
10.永遠(yuǎn)別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個(gè)表的語句,只會讓人覺得很不靠譜。
相關(guān)文章
達(dá)夢數(shù)據(jù)庫獲取SQL實(shí)際執(zhí)行計(jì)劃方法詳細(xì)介紹
在達(dá)夢數(shù)據(jù)庫中,使用EXPLAIN語句可以查看sql的執(zhí)行計(jì)劃,但EXPLAIN只生成執(zhí)行計(jì)劃,并不會真正執(zhí)行SQL語句,因此產(chǎn)生的執(zhí)行計(jì)劃有可能不準(zhǔn)。本章將帶領(lǐng)大家了解多種獲取SQL實(shí)際的執(zhí)行計(jì)劃的方法2022-10-10解析mysql二進(jìn)制日志處理事務(wù)與非事務(wù)性語句的區(qū)別
本篇文章是對mysql二進(jìn)制日志處理事務(wù)與非事務(wù)性語句的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06mysql-canal-rabbitmq 安裝部署超詳細(xì)教程
這篇文章主要介紹了mysql-canal-rabbitmq 安裝部署超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03MySQL系列之五 視圖、存儲函數(shù)、存儲過程、觸發(fā)器
視圖就是一條select語句執(zhí)行后返回的結(jié)果集;觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對象,在滿足定義條件時(shí)觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合;函數(shù)存儲著一系列sql語句,調(diào)用函數(shù)就是一次性執(zhí)行這些語句,而存儲過程就是一組可編程的函數(shù),需要的朋友可以參考下2021-07-07