Mysql寫出高質量的sql語句的幾點建議

2021-09-07 12:22:31 字數 2115 閱讀 7251

clevercode在實際的工作也寫過一些低效率的sql語句。這些語句會給資料庫帶來非常大的壓力。最基本的表現就是sql語句執行慢,後來逐漸的去優化和嘗試。

總結了一些高質量的sql語句的寫法。這裡clevercode總結一下分享給大家。】

盡量避免在列上運算,這樣會導致索引失效。

優化前:

select * from system_user where date(createtime) >= '2015-06-01'
優化後:

select * from system_user where createtime >= '2015-06-01'
優化前:

select * from system_user where age + 10 >= 20
優化後:

select * from system_user where age >= 10
用整型設計的索引,占用的位元組少,相對與字串索引要快的多。特別是建立主鍵索引和唯一索引的時候。

1)設計日期時候,建議用int代替char(8)。

比如整型:20150603。

2)設計ip時候能夠用bigint把ip轉化為長整型儲存。

使用join的時候,應該盡量讓小結果集驅動大的結果集,把複雜的join查詢拆分成多個query。由於join多個表的時候,可能會有表的鎖定和堵塞。假設大結果集很大,並且被鎖了,那麼這個語句會一直等待。

這個也是新手常犯的乙個錯誤!

優化前:

select

*from table_a a

left join table_b b

on a.id = b.id

left join table_c c

on a.id = c.id

where a.id > 100

and b.id < 200

優化後:

select

*from (

select

* from table_a

where id > 100

) aleft join(

select

* from table_b

where id < 200

)b on a.id = b.id

left join table_c

on a.id = c.id

僅列出須要查詢的字段,新手一般都查詢的時候都是*。事實上這樣不好。這對速度不會有明顯的影響,主要考慮的是節省記憶體。

優化前:

select * from system_user where age > 10
優化後:

select username,email from system_user where age > 10
優化前:

insert into system_user(username,passwd) values('test1','123456')

insert into system_user(username,passwd) values('test2','123456')

insert into system_user(username,passwd) values('test3','123456')

優化後:

profiling的使用請檢視我另外一篇部落格。《mysql使用profiling分析慢sql語句的原因》:

oracle 高質量的SQL

在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。對於海量資料,劣...

新手如何寫出高質量文章?

做優化的親們,你們還在為寫不出高質量的文章而煩惱嗎?你還在為你的原創而絞盡腦汁嗎?其實,每個新手都有這樣的經歷。不過優化的親們不要害怕,下面我就跟你們講述一下我寫文章的一些經驗。對於乙個 來說,內部的文章是非常重要的,好文章並不是一次就能寫出來的,而需要多加練習,每天看到精彩的內容時收集下來,等我們...

如何寫出高質量 高效能的MySQL查詢

如何寫出高質量 高效能的mysql查詢 下面就某些sql語句的where子句編寫中需要注意的問題作詳細介紹。在這些where子句中,即使某些列存在索引,但是由於編寫了劣質的sql,系統在執行該sql語句時也不能使用該索引,而同樣使用全表掃瞄,這就造成了響應速度的極大降低。1.is null 與 is...