SQL 语句查询与性能
2007-12-28 00:42 buru 阅读(232) 评论(0) 收藏 举报
1、筛选记录:
Where,最好用单个表中的主键进行筛选。
当条件为Not、<>时将忽略索引。
like运算符将进行全表扫描。
Where子句中的函数将可能禁用某字段的索引。
如
SELECT * FROM EDITION WHERE To_char(Print_Date,'DD-MON-YYYY')='01-jan-2005';
用索引的方法-->
SELECT * FROM EDITION WHERE PRINT_DATE=TO_DATE('01-jan-2005','DD-MON-YYYY');
2、当表很小时,读取表要比读取表上的索引更加高效。
3、复合索引的使用:WHERE 子字句的条件中 复合索引的顺序也决定是否启用复合索引。
4、Having 与WHERE
WHERE 子句在数据库读取记录是(发生I/O活动后)筛选记录。Having 子句(GROUP BY 子句的一部分)
会筛选聚合组,并在数据库所有I/O活动之后进行筛选.以下两句 第二句更高效
SELECT ISBM,PUBLISHER_ID,AVG(LIST_PRICE)
FROM EDITION
GROUP BY ISBN HAVING AVG(LIST_PRICE) >10 AND PUBLISHER_ID>5
后面一个条件移到WHERE子句下,将少读5条记录
SELECT ISBM,PUBLISHER_ID,AVG(LIST_PRICE)
FROM EDITION WHERE PUBLISHER_ID>5
GROUP BY ISBN HAVING AVG(LIST_PRICE) >10
===============
SQL语句连接查询的几个规则:
1、先进性大的筛选--对最大的几个表进行筛选,以此减少记录连接。
2、使用索引。较小的表除外。读取的大表的记录的百分比较高的也不用索引。
3、嵌套子句半连接---使用子查询能够调整连接,至少能够简化连接。这种调整对高度规范化的OLTP数据库模型非常适合。
(...此处待请教)。
Where,最好用单个表中的主键进行筛选。
当条件为Not、<>时将忽略索引。
like运算符将进行全表扫描。
Where子句中的函数将可能禁用某字段的索引。
如
SELECT * FROM EDITION WHERE To_char(Print_Date,'DD-MON-YYYY')='01-jan-2005';
SELECT * FROM EDITION WHERE PRINT_DATE=TO_DATE('01-jan-2005','DD-MON-YYYY');3、复合索引的使用:WHERE 子字句的条件中 复合索引的顺序也决定是否启用复合索引。
4、Having 与WHERE
WHERE 子句在数据库读取记录是(发生I/O活动后)筛选记录。Having 子句(GROUP BY 子句的一部分)
会筛选聚合组,并在数据库所有I/O活动之后进行筛选.以下两句 第二句更高效
SELECT ISBM,PUBLISHER_ID,AVG(LIST_PRICE)
FROM EDITION
GROUP BY ISBN HAVING AVG(LIST_PRICE) >10 AND PUBLISHER_ID>5
SELECT ISBM,PUBLISHER_ID,AVG(LIST_PRICE)
FROM EDITION WHERE PUBLISHER_ID>5
GROUP BY ISBN HAVING AVG(LIST_PRICE) >10 SQL语句连接查询的几个规则:
1、先进性大的筛选--对最大的几个表进行筛选,以此减少记录连接。
2、使用索引。较小的表除外。读取的大表的记录的百分比较高的也不用索引。
3、嵌套子句半连接---使用子查询能够调整连接,至少能够简化连接。这种调整对高度规范化的OLTP数据库模型非常适合。
(...此处待请教)。
浙公网安备 33010602011771号