程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql寫出高質量的sql語句的幾點建議

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

編輯:MySQL綜合教程

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


CleverCode在實際的工作也寫過一些低效率的sql語句。這些語句會給數據庫帶來很大的壓力,最主要的表現就是sql語句運行慢,後來逐漸的去優化和嘗試。總結了一些高質量的sql語句的寫法。這裡CleverCode總結一下分享給大家。

1 建議一:盡量避免在列上運算

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

1.1 日期運算

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

1.2 加,減,乘,除

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

2 建議二:用整型設計索引

用整型設計的索引,占用的字節少,相對與字符串索引要快的多。特別是創建主鍵索引和唯一索引的時候。 1)設計日期時候,建議用int取代char(8)。例如整型:20150603。 2)設計IP時候可以用bigint把IP轉化為長整型存儲。 \

3 建議三:join時,使用小結果集驅動大結果集

使用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
) a
left join(
	select	
		*
	from table_b
	where id < 200
)b
	on a.id = b.id
left join table_c
	on a.id = c.id

4 建議四:僅列出需要查詢的字段

僅列出需要查詢的字段,新手一般都查詢的時候都是*,其實這樣不好。這對速度不會有明顯的影響,主要考慮的是節省內存。 優化前:
select * from system_user where age > 10
優化後:
select username,email from system_user where age > 10

5 建議五:使用批量插入節省交互

優化前:
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')

優化後:
insert into system_user(username,passwd) values('test1','123456'),('test2','123456'),('test3','123456')

6 建議六:多習慣使用explain分析sql語句

\


7 建議七:多使用profiling分析sql語句時間開銷

profiling的使用請查看另外一篇文章,《Mysql使用profiling分析慢sql語句的原因》:http://www.Bkjia.com/database/201506/404310.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved