firebird sql语句优化
建立索引的优点:
1)大大加快数据的检索速度,提高数据库执行效率。
2)创建唯一性索引,保证数据库表中每一行数据的唯一性;
3)在表与表之间建立关联字段索引,加速表和表之间数据访问连接速度;
4)对频繁进行GROUPBY(分组)或ORDERBY(排序)操作的表结构字段建立索引。
优化查询速度上,应尽量避开使用视图
SQL语句优化等价变换
1)尽量避免使用<>、or、is not null、in、not in、like等这样的操作符。
这些操作符会使系统无法使用索引,而只能直接搜索全表中的数据,大大影响执行效率。
例如:select ph from jh_ph Where ph like ‘%37200%’如果使用该前后包含SQL语句,
将对表中25万条记录逐个比对分析,效率极低,运行时间大概5s,而如果在数据表中添
加一个数字品种字段phsz,预先分离数字信息,换成如下方式查询,则效果会非常好:
select ph from jh_ph where phsz=‘37200’,执行时间大概30ms左右,大大提高了运行速度。
2)尽量避免在Where子句中对字段进行函数或表达式操作。
Select ph from jh_ph here substring(ph from 1 for 4)=‘ABCD’
等价于:Select ph from jh_ph where ph like ‘ABCD%’执行效率要高于上一表达式。
3)数据查询读取中exists和union执行效率的比对:(嵌套的越多,执行越慢,越简单越好)
参考:http://www.xzbu.com/8/view-7443820.htm
CREATE global temporary TABLE tbl1 (
ID INTEGER NOT NULL,
NAME VARCHAR(32)
) ON COMMIT PRESERVE ROWS
临时表分事务级临时表和会话级临时表。
事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 指定。
会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。
SELECT a.ID, (case definetype when 1 then 0 else 1 end) as type
FROM mybook a
实时 set case中的变量行不(可以)
SELECT first 10 ID, definetype, (case definetype when ? then 0 else 1 end) as type FROM myBOOK
then 与 else必须有一个不是?