- java數據庫性能優化之SQL語句?
(參考地址)
一般來講數據查詢會使用索引來提高查詢效率,優化器根據索引來提高性能.但如果在SQL語句中的代碼不合理,導致優化器刪除索引而全表掃描,一般這種SQL語句就是劣質語句,實際SQL語句中我們要清楚優化器何時會刪除索引,從而提高查詢效率.
SQL語句中where子句容易出現的問題.及時某些列存在索引,但是由於劣質SQL語句導致不能使用索引,出現問題.
- 以EXIST代替IN的方式,提高查詢效率(主要是多了多表連接轉換的過程)
- 以NOT EXIST代替NOT IN(因爲NOT IN 沒有辦法使用索引)
- 以>0或者設置字段默認值的方式替代IS NULL和IS NOT NULL(如果字段中存在空值,索引是不會被使用的,所以通過設置字段默認值的方式 使用索引提高查詢效率)
- 以>=3替換>2(雖然從效果上看是一樣的,但是>2首先會查詢出記錄爲2的值進行比較,而>=3的會直接查詢出3的記錄索引.)
- 模糊查詢條件下不適用%xxx(因爲通配符在前面無法使用索引,造成效率的下降)
- 使用UNION ALL替代UNION(因爲UNION實際上是將2張表的數據疊加後將重複的去掉,所以效率來講就很慢)
- 避免在未建立索引的字段上進行order by排序,降低效率
- 以x<3000 x>3000的方式替代NOT (x=3000)(以爲前面的那種方式採用了索引)
所以關於SQL語句上性能的優化實際上就是儘量讓優化器使用索引,提高查詢效率(exist替代in/not exist 替代not in/>0替代is not null 設置默認值/通配符不要放在第一位/>=3替換>3/order by使用索引字段/union all 替換union/>3000and <3000替換<>3000)
SQL語句書寫的影響
1.書寫方式大寫保持一致,減少SQL語句分析
2.where限制條件順序的不同,數據量少的放前面
3.查詢表順序,數據量小的儘量放前面
所以再次強調一遍關於SQL語句優化平時有哪些點要注意?where限制條件8個+3個寫法上的注意
8個限制條件–》extist 替換in/not exist 替換not in/x>0替換 x is not null 字段設置默認值/like模糊查詢通配符不要放前面/x>=3替換x>2/orderby 排序使用索引字段/union all替代union /x>1000and x<1000替換x<>1000 not語句
3個書寫上的注意點:書寫格式保持一致 使用大寫+where 限制條件字段 存在率少的放面前/關聯查詢數據量少的儘量放前面
使用explain進行SQL語句優化.使用關聯查詢替代子查詢
-
Java中常見的設計模式有哪些?
java中常見的設計模式包含23種,包含5種構創建型模式+7中構建型模式+11種行爲性模式.
5中創建型模式:工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式.
7中構建型模式:適配器模式,裝飾器模式,代理模式,外觀模式,組合模式,橋接模式,亨元模式.
11種行爲型模式:策略模式,模板方法模式,觀察者模式,責任鏈模式,迭代子模式,命令模式,備忘錄模式,狀態模式,訪問者模式,中介者模式,解釋器模式.
所以總的來看23種模式看起來雖然很多,但只要3種模式的前面幾種後面的模式也就都好記起來了.更多的還是要理解起來.如5種創建型模式:工廠方法模式,抽象工廠模式,單例模式,原型模式,建造者模式.7種結構性模式:裝飾器模式,適配器模式,代理模式,外觀模式,橋接模式,組合模式,亨模式.11中行爲型模式.策略模式,模板方法模式,觀察者模式,責任鏈模式,迭代子模式,命令模式,狀態模式,備忘錄模式,訪問者模式,中介者模式,解釋器模式. -
請列舉出jdk中常用的一些設計模式?
單例模式引用與RunTime和Calendar類下,工廠模式主要應用於各種不可變的類,如Boolean.valueOf(),觀察者模式主要應用於swing和時間監聽裏面.裝飾器模式適應於IO輸入流中。 -
什麼是設計模式?
設計模式是開發人員針對特定問題提出的一種有效的解決辦法,設計模式是代碼可用性的延伸. -
Java中什麼是單例模式,請寫出線程安全的單例模式?
單例模式說白了一個只有一個實例對象,主要應用於Runtime(餓漢模式)和Calendar類中.
而線程安全的餓漢模式沒有問題,懶漢模式需要雙重安全檢查的.
-
解釋下什麼是 觀察者模式?
觀察者模式屬於行爲型模式的一種,主要應用於swing及時間監聽.觀察者是基於對象的狀態變化和觀察者通訊,以便對這些變化做出應對. -
使用工廠模式的好處是什麼?在哪裏使用
使用工廠模式最大的好處就是增加了創建對象的層次性.
當使用工廠模式創建對象的時候,以後可以使用更高級或者更高性能的創建對象.而不用再代碼調用層去修改.
. -
舉一個用java實現的裝飾器模式,它是對象層次還是類層次?
裝飾器模式是對象層次的,主要應用於IO輸入流.類似於靜態代理,通過代理對象實現同目標對象同樣的接口功能,並在此基礎上進行功能擴展.類似BufferReader和BufferWriter,都是基於Reader和Writer基礎上擴展的功能. -
如果讓你設計一個ATM系統,需要考慮哪些問題?
事物控制,鎖機制,錯誤條件,邊界條件等. -
什麼是工廠模式,工廠模式中的工廠方法模式與抽象工廠有什麼區別?
工廠模式是基於一個抽象產品類,衍生出不同的產品實現類,通過工廠類傳入不同的類型得以生成不同的類對象實例.工廠方法是一個抽象類或接口衍生出來的,而抽象工廠是不同的抽象類或接口衍生出來的。所以抽象工廠實際上是在工廠方法模式上的一種升級.