临时表

必须掌握的30种SQL语句优化

佐手、 提交于 2019-11-28 07:25:25
1、创建索引 CREATE INDEX lindex on table_name(`姓名`) 2、删除索引 DROP INDEX lindex on table_name 3、查看已创建的索引 show index from table_name 4、查看sql是否使用索引 EXPLAIN sql EXPLAIN SELECT * FROM table_name WHERE `姓名` = '张三' explain执行结果关注以下几个字段: type: 显示sql执行的类型,从最好到最差的类型为system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,type至少要达到range级别,最好达到ref级别,低于range级别的sql必须进行优化。 key: 显示sql执行过程中实际使用的键或索引,如果为null则表示未使用任何索引,必须进行优化。 Extra: 如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。 如果是where used,就是使用上了where限制。 如果是impossible where 表示用不着where,一般就是没查出来啥

三张关联表,大表;单次查询耗时400s,有group by order by 如何优化

半世苍凉 提交于 2019-11-28 05:29:47
问题SQL: select p.person_id as personId, p.person_name as personName, p.native_place as nativePlace, ci.company_name as companyName, pp.seal_number as sealNumber, GROUP_CONCAT(pp.major) as major, pp.register_name as registerName from qyt_person p left join qyt_person_practising pp on p.person_id=pp.person_id left join qyt_company_info ci on p.company_id=ci.company_id group by p.person_id,pp.register_name order by p.create_time desc limit 1,10 SQL总耗时393秒,通过Explain分析,发现为200万数据的表建立了临时表,且做了一次排序操作 通过查看SQL运行分析,也看出来,构造临时表耗时106秒,排序用了285秒(没索引的排序慢) 解决思路: 根据业务需求再次审视如何减少数据量 1、业务需求:最新人员可以先取出来10名 2

hive临时表

天涯浪子 提交于 2019-11-28 05:04:14
hive可以在脚本的hql最前端,用如下语句 with 临时表名 as (sql语句) 创建临时表,只在当前脚本使用的临时表。 来源: https://www.cnblogs.com/lidapengwww/p/11392841.html

SQL Server 常用分页SQL

两盒软妹~` 提交于 2019-11-28 03:08:39
今天无聊和朋友讨论分页,发现网上好多都是错的。网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题。为此上网查了查,顺带把2000和2012版本的也补上了。 先说说网上常见SQL的错误或者说局限问题 select top 10 * from table1 where id not in( select top 开始的位置 id from table1) 这样的确是可以取到分页数据,但是这是默认排序的,如果要按其中一列排序呢?那order by 加在哪里呢?里外都加,显然不行,外面的Order不起作用,只能嵌套,Oh my god,编程三个Select了,这效率。 为了好用效率高,总体思路还是老老实实的用RowNumber解决,但是SQL2000没有RowNumber,其实我们可以通过临时表自增列搞定,不多说,上例子。 SQL 2000 用临时表解决,通过在临时表中增加自增列解决RowNumber。 DECLARE @Start INT DECLARE @End INT SELECT @Start = 14000,@End = 14050 CREATE TABLE #employees (RowNumber INT IDENTITY(1,1), LastName VARCHAR(100),FirstName VARCHAR(100),

tmp_table_size参数

倖福魔咒の 提交于 2019-11-27 21:30:28
1、参数查看 方法一:mysql> show variables like 'tmp_table_size'; 方法二:直接查看my.cnf文件tmp_table_size参数值 2、参数配置 方法一:mysql> set global tmp_table_size=16*1024*1024; 重启后会丢失使用my.cnf参数 方法二:直接修改my.cnf文件tmp_table_size参数值,但需要重启实例生效 3、参数值意义   tmp_table_size参数配置内部内存临时表的大小。 此参数不适用用户创建的MEMORY表,用户创建的MEMORY表用max_heap_table_size参数配置。 实际限制由tmp_table_size和max_heap_table_size的值中较小的一个确定,如果内存中的临时表超出限制,MySQL自动将其转换为磁盘上的MyISAM表。如果要执行许多 GROUP BY查询,可以增加tmp_table_size的值(或如有必要,也可以使用max_heap_table_size)。    执行计划中Extra字段包含有“Using temporary” 时会产生临时表。 4、外料   MySQL中临时表主要有两类,包括外部临时表和内部临时表。外部临时表是通过语句create temporary table...创建的临时表,临时表只在本会话有效

Oracle+11g+从入门到精通下载

本秂侑毒 提交于 2019-11-27 20:10:29
下载地址: http://www.gqylpy.com/di/18 《Oracle 11g 从入门到精通》PDF高清完整版-下载 目录 编辑 第1章 了解Oracle 1.1 Oracle中的基本概念 1.1.1 数据库 1.1.2 实例 1.1.3 用户与模式 1.2 Oracle安装 1.2.1 Oracle的应用结构 1.2.2 安装环境 1.2.3 管理系统服务 1.3 Oracle工具 1.3.1 使用SQL*Plus 1.3.2 使用Ouacle Enterprise Manager 1.4 创建数据库 第2章 Oracle的基本体系结构 2.1 物理存储结构 2.1.1 数据文件 2.1.2 控制文件 2.1.3 重做日志文件 2.1.4 其他文件 2.2 逻辑存储结构 2.2.1 表空间(tablespade) 2.2.2 段(segment) 2.2.3 区(extent) 2.2.4 块(block) 2.3 Oracle实例结构 2.3.1 进程结构 2.3.2 Oracle内存结构 2.4 数据字典 第3章 存储管理 3.1 管理基本表空间 3.1.1 表空间管理类型 3.1.2 创建基本表空间 3.1.3 修改表空间 3.2 临时表中间 3.2.1 创建临时表空间 3.2.2 修改临时表空间 3.2.3 临时表空间组 3.3 大文件表空间 3.4

SQL注入总结

会有一股神秘感。 提交于 2019-11-27 19:21:59
SQL注入类型及检测注入 字符型注入 对于字符型注入,SQL语句如下 SELECT * FROM user_info WHERE id = '1'; 其实就是用户输入在引号内啦 就上面的定义来说,简单的检测方法就是用户输入带引号,以导致SQL语句结构不完整而报错或没有响应 True表示语句可用(正确显示内容或者操作有效) F alse表示语句不可用(Mysql报错或者无内容显示) 引号使用举例 SELECT * FROM user_info WHERE id = '1'' SELECT 1 FROM user_info WHERE 1 = '1'''''''''''''UNION SELECT '2'; 备注:多个引号的作用在一个智能WAF场景下,可以绕过语法检测 只要能够闭合,那么你就可以使用尽可能多的引号,在闭合完成的引号后面可以添加语句,利用引号闭合让原本的引号逃逸 数字型注入 相对字符型的,数字型的就是不加引号,用户输入是数字,SQL语句如下: SELECT * FROM Table WHERE id = 1; 通过运算符判断注入的存在 注意 : 数字型注入中,true相当与1,false相当与0. mysql的注释符 很多时候,用户的输入往往是被拼接到Sql语句的中间部分而非结尾,这样的话,可控部分后面的Sql代码往往会对我们的注入语句产生影响,造成意料之外的错误

SQL注入--盲注及报错注入

二次信任 提交于 2019-11-27 19:21:31
盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales 其实登录处的注入就是布尔型的,万能密码就是构造一个永真的查询,比如下面的 select user from test where passwd=‘{injuct}’; #构造永真,即令where的条件用于为真 select user from test where passwd=‘aa‘or’1’=‘1’; #注入的数据是aa‘or’1’=‘1 密码输入无论是否正确,查询都成立。 布尔盲注其实就是利用了这种,我们什么时候需要采用这种呢 1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况, 2)有正确或者错误的两种返回,比如查询正确返回一个页面,失败返回另一个页面,但是没有数据 时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数, 通过查看web页面返回的时间差来判断注入的语句是否正确 。 利用的内置函数 sleep(n):将程序挂起一段时间 n为n秒 if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句 注入的语句

MYSQL调优总结1

被刻印的时光 ゝ 提交于 2019-11-27 11:45:56
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 答:大的思路-------- 是周期性的变化还是偶尔问题? 是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间. 唯一的办法-----监测并观察服务器的状态. 1:观察服务器状态, 一般用如下2个命令 Show processlist; 这个命令是显示当前所有连接的工作状态. 如果观察到以下状态,则需要注意 converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 (语句写的不好,取数据太多) create tmp table 创建临时表(如group时储存中间结果,说明索引建的不好) Copying to tmp table on disk 把内存临时表复制到磁盘 (索引不好,表字段选的不好) locked 被其他查询锁住 (一般在使用事务时易发生,互联网应用不常发生) logging slow query 记录慢查询 例: mysql> show status; 查看链接状态 mysql 5.5 以后加了一个profile设置,可以观察到具体语句的执行步骤. 0:查看profile是否开启 > Show variables like ‘profiling’ 1:> set profiling=on; mysql>

MYSQL调优总结1

喜欢而已 提交于 2019-11-27 11:45:43
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 答:大的思路-------- 是周期性的变化还是偶尔问题? 是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间. 唯一的办法-----监测并观察服务器的状态. 1:观察服务器状态, 一般用如下2个命令 Show processlist; 这个命令是显示当前所有连接的工作状态. 如果观察到以下状态,则需要注意 converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 (语句写的不好,取数据太多) create tmp table 创建临时表(如group时储存中间结果,说明索引建的不好) Copying to tmp table on disk 把内存临时表复制到磁盘 (索引不好,表字段选的不好) locked 被其他查询锁住 (一般在使用事务时易发生,互联网应用不常发生) logging slow query 记录慢查询 例: mysql> show status; 查看链接状态 mysql 5.5 以后加了一个profile设置,可以观察到具体语句的执行步骤. 0:查看profile是否开启 > Show variables like ‘profiling’ 1:> set profiling=on; mysql>