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