面試被問到了sql優化,回來學習一下,看別人的文章,自己在手動記錄一遍,算是加深印象吧。
所謂sql優化,本質上有三種選擇:
1、降低目標sql語句的資源消耗
2、並行執行目標sql語句
3、平衡系統的資源消耗
以上的說明比較難理解,還是記錄一些簡單易懂的方法:
1、對查詢進行優化,避免全表查詢。
2、避免在where子句使用null值判斷,會導致索引失效。
3、避免在where子句中使用!=和<>操作符,會導致索引失效。
4、避免在where子句中使用or連線條件,也會導致索引失效。
5、in和not in 也要慎用,也會導致索引失效。
6、避免在where子句中進行計算操作,例如select id from t where num = 100*2
7、避免在where子句中進行函式操作,例如select id from t where substring(name,1,3) = 'abc'
8、很多時候可以用exists代替in,例如:
select num from a where num in (select num from b)
可以優化為:
select num from a where exists (select 1 from b where num = a.num)
9、並不是所有的索引對查詢都有效,sql是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引。
10、索引不是越多越好,索引固然可以提高相應的查詢效率,但同時也降低了insert和update的效率,因為insert或update時有可能會重建索引,所以建立索引需要慎重。
11、盡量使用數字型別的字段,如果只包含有數字資訊的字段盡量不要設計為字元型,這回降低查詢和連線效能,還會增加儲存開銷。這是因為引擎在處理查詢和連線時會逐個比較字串中的每乙個字元,而對於數字型而言只需要比較一次就夠了。
12、盡量使用varchar/nvarchar代替char/nchar,因為變長字段儲存空間小,可以節省儲存空間,其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些。
13、不要使用select *去查詢。
以上都比較簡單易懂,算是記錄下吧,祝自己早日找到合適的工作。 對於SQL優化學習和記錄
通過達夢資料庫的學習和培訓課程,對資料庫的語句有一些學習和看法。其中一塊是sql對語句優化。學習後了解到在日常專案過程中,常因為某些業務查詢慢和時間長的現象,部分操作時候也要花較長時間,所以或多或少涉及到語句的優化 首先在硬體上,作為底層基礎設施,良好的裝置執行效率和足夠的網路頻寬要先保證。其次是去...
MySQL 之 SQL 語句優化學習
查詢正在執行的任務列表 show full processlist g.生成乙個查詢執行計畫 query execution plan qep 一般情況下,每條sql語句都可以執行 explain 對於 update 和 delete 需要轉化為相應的 select 語句以確保有效使用索引顯示表的建...
基於Oracle的SQL優化 學習(六)
如何得到真實的執行計畫 得到目標sql的執行計畫,大致有以下四種方式 1 explain plan 命令 2 dbms xplan包 3 sqlplus中的autotrace開關 4 10046事件 除了第四種,其他三種方法都有可能是不准的。判斷乙個sq計畫任務任務是否準確,就要看目標sql是否真正...