1.索引:是一个单独的物理的数据库结构,他是某个表中一列火多列值的集合。和相应的指向表中物理标识这些值的数据页的逻辑指针清单,
查询时,第一种是全局搜索,将表中所有数据取出,进行对比,返回满足条件的记录,这样会消耗大量的数据库时间,第二种就是建立索引,索引就好像一本书的目录,能够加速查询的速度。通过索引找到符合条件的索引值,最后通过保存在索引中的ROWID相当于页码,快速找到对应的记录。索引在查询时比较快 但在修改插入时慢,每次插入时先插入到表中,在把数据插入到索引中,如果有5个索引,那么就要维护这5个索引。
索引有 主键索引,唯一索引 聚集索引
唯一索引:不允许任何两行具有相同索引值的索引 比如 在员工表中,姓列上创建索引 那么此表中不能有相同姓的员工,可以为空
主键索引:是唯一索引的一种特定类型,主键索引是主键创建后自动生成的,不能为空,他要求主键列的每个值都唯一
聚集索引:聚集索引确定表中的物理顺序,例如,字典按字母顺序排序,读者知道字母的读音可以根据字母顺序快速定位,因此聚集索引和表的内容在一起的。
2.where 1=1 这个条件始终为true,例如select * from table 和select * from table where 1=1没有区别,其目的就是使得where条件都为true。在查询条件数量不确定的情况下,加上where 1=1很方便规范语句。防止where后面第一个词就是and而导致语法错误,如果不加 就要在每一个不为空的条件后面,都必须判断有没有where字句,哪里改嫁and/or.
例如:
select * from table where1=1;
if( condition 1) {
sql=sql+" and var2=value2";
}
if(condition 2) {
sql=sql+" and var3=value3";
}
不加时: select * from table_name where and var2=value2;
3.分组查询
HAVING子句的用途
查询每个部门中, 1 982年以后入职的员工超过2个人的部门编号
SELECT deptno FROM t_emp
WHERE hiredate>="1982-01-01"
GROUP BY deptno HAVING COUNT(*)>=2;
ORDER BY deptno ASC;