1. 程式人生 > >oracle DB 使用注意點小結

oracle DB 使用注意點小結

1、DDL 後不需要新增commit;語句,因為Oracle資料庫的DDL不支援transaction,執行即commit;

  DDL(Data Definition Language): 資料定義語言,包括以下常見語句:
  建立資料庫: CREATE {DATABASE | SCHEMA} db_name;
  刪除資料庫: DROP [TEMPORARY] TABLE tbl_name [RESTRICT | CASCADE];
  建立表: CREATE [TEMPORARY] TABLE tbl_name;
  修改表: ALTER TABLE tbl_name ADD [COLUMN] column_definition; //or delete | modify | drop a column
  刪除表:DROP TABLE tbl_name [RESTRICT | CASCADE];
  建立檢視: CREATE VIEW view_name AS select_name;
  修改檢視: ALTER VIEW view_name AS select_name;
  刪除檢視: DROP VIEW view_name [RESTRICT | CASCADE];

2、能精確匹配的時候就不要使用like,尤其是萬用字元%在前面的;

  eg1. SELECT * FROM student WHERE name LIKE 'xiaoming%' ;
  eg2. SELECT * FROM student WHERE name LIKE '%xiaoming';
  eg3. SELECT * FROM student WHERE name LIKE '%xiaoming%';
  eg4. SELECT * FROM student WHERE name = 'xiaoming';
從上述四個例子來看,如果建立了索引,eg1 和 eg4 是可以直接走索引的,但是eg4精確匹配的效能要優於eg1模糊查詢;eg2 和 eg3 都只能進行全表掃描,效能差。

3、如果有SQL語句中含有in語句,且in裡面的內容多於1000,則需要將in語句拆成幾個in的語句用or連線起來。

  eg. SELECT * FROM student where oid in (1, 2, 3, ... , 2500);
  以上語句需要改成 SELECT * FROM student where oid in (1, 2, 3, ... , 1000) or oid in (1001, 1002, 1003, ... , 2000) or oid in (2001, 2002, 2003, ... , 2500);

4、如果某個欄位定義時型別是字元形式,但是內容都是數字,在查詢的時候,最好用單引號將數字括起來,因為型別不一致的話會導致資料庫進行強制型別轉換,從而查詢不走索引。

  eg. SELECT * FROM student where no = '15121295';

參考網址:
DDL