摘要:如果表數(shù)據(jù)有一定的量了,不妨用命令來(lái)取得字段的優(yōu)化建議在里可以在查看表時(shí),點(diǎn)擊來(lái)查看這些建議如此可以讓你的表字段結(jié)構(gòu)趨向完善。永遠(yuǎn)別要用復(fù)雜的語(yǔ)句來(lái)顯示你的聰明。應(yīng)盡量避免在子句中使用或操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
1、將經(jīng)常要用到的字段(比如經(jīng)常要用這些字段來(lái)排序,或者用來(lái)做搜索),則最好將這些字段設(shè)為索引。
2、字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。
3、當(dāng)然無(wú)可避免某些字段會(huì)用到text ,varchar等字符類型,最好將text字段的多帶帶出另外一個(gè)表出來(lái)(用主鍵關(guān)聯(lián)好)
4、字段的類型,以及長(zhǎng)度,是一個(gè)很考究開發(fā)者優(yōu)化功力的一個(gè)方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來(lái)取得字段的優(yōu)化建議!(在phpmyadmin里可以在查看表時(shí),點(diǎn)擊 “Propose table structure” 來(lái)查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。
5、select 盡量少用,你想要什么字段 就select 什么字段出來(lái) 不要老是用 號(hào)!同理,只要一行數(shù)據(jù)時(shí)盡量使用 LIMIT 1
6、絕對(duì)不要輕易用order by rand() ,很可能會(huì)導(dǎo)致mysql的災(zāi)難!!
7、每個(gè)表都應(yīng)該設(shè)置一個(gè)ID主鍵,最好的是一個(gè)INT型,并且設(shè)置上自動(dòng)增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事!!
8、拆分大的 DELETE 或 INSERT 語(yǔ)句。因?yàn)檫@兩個(gè)操作是會(huì)鎖表的,表一鎖住了,別的操作都進(jìn)不來(lái)了,就我來(lái)說(shuō) 有時(shí)候我寧愿用for循環(huán)來(lái)一個(gè)個(gè)執(zhí)行這些操作。
9、不要用永久鏈接 mysql_pconnect();除非你真的非常肯定你的程序不會(huì)發(fā)生意外,不然很可能也會(huì)導(dǎo)致你的mysql死掉。
10、永遠(yuǎn)別要用復(fù)雜的mysql語(yǔ)句來(lái)顯示你的聰明。就我來(lái)說(shuō),看到一次關(guān)聯(lián)了三,四個(gè)表的語(yǔ)句,只會(huì)讓人覺(jué)得很不靠譜。
11、應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
12、應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
13、應(yīng)盡量避免在 where 子句中使用 or 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:
select id from t where num=10 or num=20 可以這樣查詢: select id from t where num=10 union all select id from t where num=20
14、模糊查詢的%XX%會(huì)導(dǎo)致全表掃描
15、in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,盡量使用between and
16、應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:
select id from t where num/2=100 應(yīng)改為: select id from t where num=100*2
17、應(yīng)盡量避免在where子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
18、索引并不是越多越好,索引固然可以提高相應(yīng)的 select 的效率,但同時(shí)也降低了 insert 及 update 的效率,因?yàn)?insert 或 update 時(shí)有可能會(huì)重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個(gè)表的索引數(shù)最好不要超過(guò)6個(gè),若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要
19、任何地方都不要使用 select from t ,用具體的字段列表代替“”,不要返回用不到的任何字段
20、盡可能的使用 varchar/nvarchar 代替 char/nchar ,因?yàn)槭紫茸冮L(zhǎng)字段存儲(chǔ)空間小,可以節(jié)省存儲(chǔ)空間,其次對(duì)于查詢來(lái)說(shuō),在一個(gè)相對(duì)較小的字段內(nèi)搜索效率顯然要高些。
21、盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對(duì)于數(shù)字型而言只需要比較一次就夠了。
列表項(xiàng)目
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30317.html
閱讀 788·2023-04-25 17:33
閱讀 3644·2021-07-29 14:49
閱讀 2490·2019-08-30 15:53
閱讀 3443·2019-08-29 16:27
閱讀 2013·2019-08-29 16:11
閱讀 1040·2019-08-29 14:17
閱讀 2449·2019-08-29 13:47
閱讀 2025·2019-08-29 13:28