SQL复查总结
一、权限
1.重新建用户和库
create user test with password '6789@jkl';
create database db_test owner test;
grant all privileges on database db_test to test;
--给test用户赋予所有权限
alter user test set search_path to db_test, public;
-- http://blog.csdn.net/su377486/article/details/50826639
2.在已有库建权限
grant all privileges on database db_test to test;
grant all on schema db_schema to test;(所有schema)
grant all on all tables in schema db_schema to test;(表、视图)区别
grant all on table db_schema.t_test to test; (GP)
二、慢SQL
1、格式化sql,查看sql是否合理,业务逻辑是否有问题。
2、查看执行计划,是否走索引,是否有全表扫描。
3、SQL拆解,分步执行看快慢,尝试加索引。
4、慢sql常见情况典型情况:
全表扫描、
外键索引缺失
like %%、select 子查询、 or、notin、not exists。
三、查看执行计划(关于执行计划在另一篇博客中有讲解)---explain explain analysis
EXPLAIN
SELECT * FROM DB_TEST.T_TEST
1.评估开始消耗..评估总消耗。假设查询从执行到结束的时间。
2.评估查询节点的输出行数。假设该节点执行结束。
3.评估查询节点的输出行的平均字节数。
EXPLAIN
SELECT * FROM DB_MSYS.T_MSYS where n_jbfy = 2300;(没有索引)
EXPLAIN
SELECT * FROM DB_MSYS.T_MSYS where n_jbfy = 2300;(jbfy索引)
EXPLAIN ANALYZE
SELECT * FROM DB_MSYS.T_MSYS aj , db_msys.t_msysdsr dsr
where aj.n_ajbs = dsr.n_ajbs and aj.n_jbfy in (2300,2356)
SQL是否需要调优,有一个标准是,查看执行计划EXPLAIN和EXPLAIN ANALYZE的时间相差不大,说明不需要调优
解释:
1、通过EXPLAIN ANALYZE可以检查规划器评估的准确性。使用ANALYZE选项,EXPLAIN实际运行查询,显示真实的返回记录数和运行每个规划节点的时间--http://toplchx.iteye.com/blog/2091860
2、EXPLAIN还有BUFFERS选项可以和ANALYZE一起使用,来得到更多的运行时间分析,Buffers提供的数据可以帮助确定哪些查询是I/O密集型的
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM DB_MSYS.T_MSYS