說出一些數據庫優化方面的經驗?


  1. PreparedStatement 一般來說比 Statement 性能高
    1. 一個 sql 發給服務器去執行, 涉及步驟:語法檢查、 語義分析, 編譯, 緩存
      “inert into user values(1,1,1)”-二進制
      “inert into user values(2,2,2)”-二進制
      “inert into user values(?,?,?)”-二進制
  2. 有外鍵約束會影響插入和刪除性能, 如果程序能夠保證數據的完整性, 那在設計數據庫時就
    去掉外鍵。( 比喻: 就好比免檢產品, 就是為了提高效率, 充分相信產品的制造商)
    ( 對於 hibernate 來說, 就應該有一個變化: empleyee->Deptment 對象, 現在設計時就成了
    employeedeptid
    mysql 幫助文檔子查詢章節的最后部分, 例如, 根據掃描的原理, 下面的子查詢語句要比
    第二條關聯查詢的效率高:
    1. select e.name,e.salary where e.managerid=(select id from employee where name='zxx');
    2. select e.name,e.salary,m.name,m.salary from employees e,employees m where
    e.managerid = m.id and m.name='zxx';
    表中允許適當冗余, 譬如, 主題帖的回復數量和最后回復時間等
    將姓名和密碼單獨從用戶表中獨立出來。 這可以是非常好的一對一的案例喲!
  3. sql 語句全部大寫, 特別是列名和表名都大寫。 特別是 sql 命令的緩存功能, 更加需要統一
    大小寫, sql 語句發給 oracle 服務器語法檢查和編譯成為內部指令緩存和執行指令。
    根據緩存的特點, 不要拼湊條件, 而是用?PreparedStatment
  4. 還有索引對查詢性能的改進也是值得關注的



  5. 備注: 下面是關於性能的討論舉例
    4 航班 3 個城市
    m*n
    select * from flight,city where flight.startcityid=city.cityid and city.name='beijing';
    m + n
    select * from flight where startcityid = (select cityid from city where cityname='beijing');
    select flight.id,'beijing',flight.flightTime from flight where startcityid = (select cityid from city
    where cityname='beijing')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM