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