MySQL SQL語句優(yōu)化的10條建議
更新時間: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ú)出另外一個表出來(用主鍵關(guān)聯(lián)好)
4.字段的類型,以及長度,是一個很考究開發(fā)者優(yōu)化功力的一個方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時,點(diǎn)擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。
5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號!同理,只要一行數(shù)據(jù)時盡量使用 LIMIT 1
6.絕對不要輕易用order by rand() ,很可能會導(dǎo)致mysql的災(zāi)難?。?BR>7.每個表都應(yīng)該設(shè)置一個ID主鍵,最好的是一個INT型,并且設(shè)置上自動增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事?。?BR>8.拆分大的 DELETE 或 INSERT 語句。因?yàn)檫@兩個操作是會鎖表的,表一鎖住了,別的操作都進(jìn)不來了,就我來說 有時候我寧愿用for循環(huán)來一個個執(zhí)行這些操作。
9.不要用永久鏈接 mysql_pconnect();除非你真的非常肯定你的程序不會發(fā)生意外,不然很可能也會導(dǎo)致你的mysql死掉。
10.永遠(yuǎn)別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個表的語句,只會讓人覺得很不靠譜。
2.字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。
3.當(dāng)然無可避免某些字段會用到text ,varchar等字符類型,最好將text字段的單獨(dú)出另外一個表出來(用主鍵關(guān)聯(lián)好)
4.字段的類型,以及長度,是一個很考究開發(fā)者優(yōu)化功力的一個方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時,點(diǎn)擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。
5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號!同理,只要一行數(shù)據(jù)時盡量使用 LIMIT 1
6.絕對不要輕易用order by rand() ,很可能會導(dǎo)致mysql的災(zāi)難?。?BR>7.每個表都應(yīng)該設(shè)置一個ID主鍵,最好的是一個INT型,并且設(shè)置上自動增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事?。?BR>8.拆分大的 DELETE 或 INSERT 語句。因?yàn)檫@兩個操作是會鎖表的,表一鎖住了,別的操作都進(jìn)不來了,就我來說 有時候我寧愿用for循環(huán)來一個個執(zhí)行這些操作。
9.不要用永久鏈接 mysql_pconnect();除非你真的非常肯定你的程序不會發(fā)生意外,不然很可能也會導(dǎo)致你的mysql死掉。
10.永遠(yuǎn)別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個表的語句,只會讓人覺得很不靠譜。
相關(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í)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03MySQL系列之五 視圖、存儲函數(shù)、存儲過程、觸發(fā)器
視圖就是一條select語句執(zhí)行后返回的結(jié)果集;觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對象,在滿足定義條件時觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合;函數(shù)存儲著一系列sql語句,調(diào)用函數(shù)就是一次性執(zhí)行這些語句,而存儲過程就是一組可編程的函數(shù),需要的朋友可以參考下2021-07-07