临时表

6-1 视图

ぐ巨炮叔叔 提交于 2019-12-01 06:55:46
一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+ | 1 | 张磊老师 | | 2 | 李平老师 | |

MySQL 视图

ε祈祈猫儿з 提交于 2019-12-01 06:16:17
一 、视图的类型 MERGE   将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。   2.TEMPTABLE   将视图的结果集存放在临时表中,每次执行时从临时表中操作。   3.UNDEFINED   默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。   所以,这里推荐使用MERGE算法类型视图。 二、视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。 可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制)。 三、视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性; 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别 参考资料: Mysql视图使用总结 MySQL 视图 来源: https://www.cnblogs.com/songsongblue/p/11664424.html

mysql性能调优精简版

蓝咒 提交于 2019-12-01 05:07:28
大家好,我是烤鸭: 这是根据官方文档提炼出的mysql性能优化总结。 想看完整翻译版的请看 https://blog.csdn.net/Angry_Mills/article/details/87720396 1. 成本优化 成本包含: IO 和 CPU 从硬盘读取的花费 模型包含: 全表扫描(IO成本:表中的pages * IO阻塞读取成本 CPU成本: 行 * 行计算成本) 和 范围索引扫描(IO成本:范围中的行 * IO阻塞读取成本 IO成本:范围中的行 * 行计算成本) 2. 利用工具监视sql MySQL Enterprise Monitor (MEM), Query Analyzer Performance schema 执行计划 events_statements_history , events_statements_history_long 大部分最近执行的statement events_statements_summary_by_digest 总结相似操作(相同的statement合并) file_summary_by_event_name Interesting event: wait/io/file/innodb/innodb_data_file table_io_waits_summary_by_table table_io_waits_summary

Mysql-explain之Using temporary和Using filesort解决方案

家住魔仙堡 提交于 2019-12-01 02:30:51
项目刚刚告一段落,boos又让优化几个主要界面 程序代码方便的优化就不讲了,主要说MySQL的优化 首先查看explain执行计划,让主要查询语句使用索引,索引type级别最好达到ref | ref_eq级别 其次将extra一栏的Using temporary(临时表)、Using filesort(文件排序)拖出去砍了 第一条语句 explain select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESC 大家应该知道使用order by的 字段要使用索引,这条语句中create_time已经创建了索引,但是计划中并没有使用该索引,导致出现了Using filesort文件排序,使其查询变慢 解决方法如下: 从where条件开始,依照顺序创建一个组合索引,就可以砍掉Using filesort这个令人讨厌的头颅了 注意:必须依照顺序,在创建组合索引时,where条件的字段在orderBy的字段之前,如果orderBy是多字段,则必须依照顺序创建 详情可参考链接: https://blog.csdn.net/dingxingmei/article/details/49096591 第二条语句 explain select s.* from tb

优化小技巧

心已入冬 提交于 2019-12-01 02:30:20
1、group by   分组用于统计,而不用于筛选数据   比如:统计平均分、最高分适合,但用于筛选重复数据则不适合   以及用索引来避免临时表和文件排序 2、以A,B标连接为例,主要查询A表的列   那么group by , order by的列尽量相同,而且列应该显示声明为A列,如A.XX 3、union优化   注意:union all 不过滤, 效率提高,如非必须,请用union all   因为 union 去重的代价非常高,放在程序里去重 来源: https://www.cnblogs.com/longqin/p/11648158.html

sql注入之报错注入

☆樱花仙子☆ 提交于 2019-12-01 02:25:39
报错注入 报错注入在没法用union联合查询时用,但前提还是不能过滤一些关键的函数。 报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这里主要记录一下 xpath语法错误 和 concat+rand()+group_by()导致主键重复 xpath语法错误 利用xpath语法错误来进行报错注入主要利用 extractvalue 和 updatexml 两个函数。 使用条件:mysql版本>5.1.5 extractvalue函数 函数原型:extractvalue(xml_document,Xpath_string) 正常语法:extractvalue(xml_document,Xpath_string); 第一个参数:xml_document是string格式,为xml文档对象的名称 第二个参数:Xpath_string是xpath格式的字符串 作用:从目标xml中返回包含所查询值的字符串 第二个参数是要求符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里,因此可以利用。 pyload: id='and(select extractvalue("anything",concat('~',(select语句)))) 例如: id='and(select extractvalue(1,concat('~',

Sql Server Tempdb原理-日志机制解析实践

断了今生、忘了曾经 提交于 2019-12-01 00:57:15
笔者曾经在面试DBA时的一句”tempdb为什么比其他数据库快?”使得95%以上的应试者都一脸茫然.Tempdb作为Sqlserver的重要特征,一直以来大家对它可能即熟悉又陌生.熟悉是我们时时刻刻都在用,陌生可能是很少有人关注它的运行机制.这次我将通过实例给大家介绍下tempdb的日志机制. 测试用例 我们分别在用户数据库(testpage),tempdb中创建相似对象t1,#t1,并在tempdb中创建创建非临时表,然后执行相应的insert脚本(用以产生日志),并记录执行时间用以比较用以比较说明tempdb”快” Code 用户数据库testpage use testpage go create table t1 ( id int identity(1,1) not null, str1 char(8000) ) declare @t datetime2=sysutcdatetime() declare @i int set @i=1 while (@i<100000) begin insert into t1 select @i,'aa' select @i=@i+1 end select [extime]=DATEDIFF(S,@t,sysutcdatetime()) tempdb use tempdb go create table #t1 ( id int not

MySQL基础知识

自古美人都是妖i 提交于 2019-11-30 21:04:12
mysql的二进制日志 记录了所有对MySQL数据库的数据增删查改和对表和数据库的修改,需要在myc.cnf配置文件中进行配置 基于段的日志格式:binlog_format=STATEMENT 基于行的日志格式:binlog_format=ROW binlog_row_image=[FULL|MINIMAL|NOBLOB] 混合日志格式:binlog_format=MIXED 根据sql语句由系统决定使用基于段还是基于行的日志格式; 数据量的大小由所执行的sql语句决定 建议使用binlog_format=MIXED 或者 binlog_format=ROW并设置binlog_row_image=MINIMAL 查看二进制日志:mysqlbinlog -vv 日志文件名称,比如: mysqlbinlog -vv mysql-bin.000002 log_bin = mysql-bin # 开启及设置二进制日志文件名称 binlog_format = MIXED # 混合日志格式 sync_binlog = 1 # 二进制日志(binary log)同步到磁盘的频率 rpl_semi_sync_master_wait_point = after_sync expire_logs_days =7 #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。 数据库优化的几个方面 (1

第一次用临时表的感受:

▼魔方 西西 提交于 2019-11-30 18:51:41
WITH WOTotal AS ( SELECT sysuser.REALNAME,count(1) AS TotalCount FROM WO_OperaionWorkOrderBills owobill WITH(nolock) LEFT JOIN SYS_USER sysuser WITH(NOLOCK) ON sysuser.USERID=owobill.OWOReceiver WHERE sysuser.REALNAME IS NOT NULL and OWOState!='OWO_Completed' GROUP BY sysuser.REALNAME ), WOAdd AS ( SELECT sysuser.REALNAME,count(1) AS AddCount FROM WO_OperaionWorkOrderBills owobill WITH(nolock) LEFT JOIN SYS_USER sysuser WITH(NOLOCK) ON sysuser.USERID=owobill.OWOReceiver WHERE sysuser.REALNAME IS NOT NULL and OWOState='OWO_Add' GROUP BY sysuser.REALNAME ), WODispatched AS ( SELECT sysuser

SQL相关优化

拟墨画扇 提交于 2019-11-30 18:43:52
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/samjustin1/article/details/52314813 第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。   2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。   3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0   4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20