第一次寫博,就貢獻出這篇MySQL優化經驗。

2022-05-01 13:18:06 字數 1603 閱讀 8813

如何寫出高效的sql

語句(從建表到查詢)

1、 資料型別盡量用數字型,數字型比字元型的快

2、 選擇正確的表引擎

myisam 適合於一些需要大量查詢的應用,但其對於有大量寫操作並不是很好。甚至你只是需要

update

乙個字段,整個表都會被鎖起來,而別的程序,就算是讀程序都無法操作直到讀操作完成。另外,

myisam 

對於 select count(*) 

這類的計算是超快無比的。

innodb 的趨勢會是乙個非常複雜的儲存引擎,對於一些小的應用,它會比 

myisam 

還慢。他是它支援「行鎖

」 3、 選擇合適的資料型別。性別」

,「國家」

,「民族」

,「狀態」

或「部門」

,你知道這些欄位的取值是有限而且固定的,那麼,你應該使用 

enum 

而不是 

varchar

。4、 盡量給字段加上not null

5、 乙個表不要加太多索引,因為索引影響插入和更新的速度

6、 適當的使用冗餘的反正規化設計,以空間換時間有的時候會很高效

7、 盡量不要在資料庫中做運算

8、 使用預處理語句。例如使用pdo來操作

mysql

在效能方面,當乙個相同的查詢被使用多次的時候,這會為你帶來可觀的效能優勢。你可以給這些prepared statements(預處理語句

)定義一些引數,而mysql

只會解析一次。

9、 不要在生產環境程式中使用select * from 

的形式查詢資料。只查詢需要使用的列

10、 查詢盡可能使用limit

減少返回的行數,減少資料傳輸時間和頻寬浪費

11、 所有的sql

關鍵字用大寫,避免

sql語句重複編譯造成系統資源的浪費

12、開啟慢查詢日誌,定期用explain

或desc

優化慢查詢中的

sql語句

13、最先出現的條件,一定是過濾和排除掉更多結果的條件,第二出現的次之。

14、對查詢進行優化,盡量避免全表掃瞄。首先應考慮在where

以及order by

涉及的列上建立索引。

15、盡量避免在where

子句中對字段進行

null

值判斷。這會進行全表掃瞄

select id,name from user where name is null;

16、盡量避免在where

子句中對字段進行表示式操作。這會導致引擎放棄使用索引而進行全表掃瞄

select id,name from user where age/12;

17、使用連線(join

)代替子查詢

select * from custominfo where customid in ( select customid from saleinfo  )

18、對於

or子句,如果要利用索引,則

or之間的每個條件列都必須用到索引,如果沒有索引,則應該考慮增加索引。

個人**有興趣的可以看下:www.php98.cn

第一次寫博

這是我頭一次寫部落格,寫部落格的原因是因為自從大三結束,大四開始實習以來,我發現我的生活似乎沒有了學習的動力。自己實習的公司只是乙個小公司,在平常所做的專案中,做的最多的就只是增刪改查,做完以後便開始無所事事,受周圍人的影響,我開始認為程式設計師的生活無非就是完成主管布置的增刪改查,不會的東西網上查...

第一次寫博

一直以來想寫點東西,但一直提不起興趣,總是給自己找很多的理由 沒時間,工作忙 這或許是懶人常找的藉口吧。科技在不斷的發展,作為it工作者要學的東西也越來越多,如果現在停止不前,或許兩三年後這個行業就沒有你的立身之處了。網路給我們帶來諸多的便利,遇到棘手的問題,問你身邊的人或者打個800可能都沒有直接...

第一次寫微博2011 07 27

註冊了這麼長時間的的csdn,本來是為了給你自己學習用的,想不道第一次寫的是自己2年工作以來的一次對自己的表述。想了很久不知道該不該發這篇文章。最終決定如果有什麼事情要寫出來這樣,以後自己就可以多提示提示自己,好好的該一下。在公司幹了這麼長時間,我總覺得自己是很了不起的,瞧不起這個,看不起那個。公司...