- 用 PreparedStatement 一般來說比 Statement 性能高:
- 一個 sql 發給服務器去執行, 涉及步驟:語法檢查、 語義分析, 編譯, 緩存
“inert into user values(1,1,1)”-二進制
“inert into user values(2,2,2)”-二進制
“inert into user values(?,?,?)”-二進制
- 一個 sql 發給服務器去執行, 涉及步驟:語法檢查、 語義分析, 編譯, 緩存
- 有外鍵約束會影響插入和刪除性能, 如果程序能夠保證數據的完整性, 那在設計數據庫時就
去掉外鍵。( 比喻: 就好比免檢產品, 就是為了提高效率, 充分相信產品的制造商)
( 對於 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';
表中允許適當冗余, 譬如, 主題帖的回復數量和最后回復時間等
將姓名和密碼單獨從用戶表中獨立出來。 這可以是非常好的一對一的案例喲! - sql 語句全部大寫, 特別是列名和表名都大寫。 特別是 sql 命令的緩存功能, 更加需要統一
大小寫, sql 語句發給 oracle 服務器語法檢查和編譯成為內部指令緩存和執行指令。
根據緩存的特點, 不要拼湊條件, 而是用?和 PreparedStatment - 還有索引對查詢性能的改進也是值得關注的
- 備注: 下面是關於性能的討論舉例
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')
