拳皇命运手游怎么添加好友怎么加好友|拳皇命运体验服
首頁/百家講堂/為什么我的SQL比你的快

為什么我的SQL比你的快

剛開始寫sql的時候或許我們不會在乎它的優化, 但到后來發現數據大導致服務器反應慢的時候就不得不重視了!

要提高SQL語句的執行效率,最常見的方法就是建立索引,以及盡量避免全表掃描。下面主要介紹幾個查詢語句實例:

1、避免在 where 子句中使用 or來連接條件。

如:select tell from user where name = ‘yang’ or name = 'heng'

這種情況,我們可以這樣寫:

select tell from user where name = 'yang' union all select id from user where name = 'heng'

2、少用 not in 或 in。

雖然對于 in 的條件會使用索引,不會全表掃描,但是在某些特定的情況,使用其他方法也許效果更好。

如:select title from guestbook where id in(1,2,3,4,5)

像這種連續的數值,我們可以使用 BETWEEN num1 AND num2,如:select title from guestbook where id between 1 and 5

3、避免在 where 子句中對字段進行函數操作。

如:select id from table where substring(name,1,4) = 'yang'

或 select id from table where datediff(day,date,'2014-12-16) >= 0

這兩條語句中都對字段進行了函數處理,這樣就是的查詢分析器放棄了索引的使用。

建議這樣:select id from table where name like 'yang%' 或 select id from table where date <= '2014-12-16' ,也就是說,不要在 where 子句中的 = 左邊進行函數、算術運算或其他表達式運算。

4、注意 like 中通配符的使用。

下面的語句會導致全表掃描,盡量少用。如:

select email from tabel where name like '%zong%'或者select email from tabel where name like'%zong'

而下面的語句執行效率要快的多,因為它使用了索引:select email from tabel where name like 'zong%'

為什么我的SQL比你的快

5、避免在 where 子句中使用 != 或 <> 操作符。

如:select name from table where id <> 50, 數據庫在查詢時,對 != 或 <> 操作符不會使用索引,而對于 < 、 <= 、 = 、 > 、 >= 、 BETWEEN AND,數據庫才會使用索引。因此對于上面的查詢,建議使用:

select name from table where id < 50 union all select name from table where id > 50

6、避免在 where 子句中對字段進行表達式操作。

如:select name from table where id/2 = 100 正確的寫法應該是:select name from table where id = 100*2

7、在子查詢中,用 exists 代替 in 是一個好的選擇。

如:select name from a where id in(select id from b)

如果我們將這條語句換成下面的寫法:select name from a where exists(select 1 from b where id = a.id) 這樣,查詢出來的結果一樣,但是下面這條語句查詢的速度要快的多。

以上說到的幾點也不是必須要這樣寫, 建議在數據多的時候使用。

這幾點只是sql優化大海中的幾滴水, 要在程序這個世界里追求更完美, 我們還得不斷猜想和實踐!

拳皇命运手游怎么添加好友怎么加好友