select

MySQL优化

假装没事ソ 提交于 2020-04-05 17:41:05
一、EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式 key_len列,索引长度 rows列,扫描行数。该值是个预估值 extra列,详细说明。注意常见的不太友好的值有:Using filesort, Using temporary 二、SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from table_name where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了;再或者使用连接来替换。 三、SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu、io、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。所以要求直接在select后面接上字段名。 四、当只需要一条数据的时候,使用limit 1 这是为了使EXPLAIN中type列达到const类型 五

MyBatis Plus自定义SQL使用条件构造器QueryWrapper

淺唱寂寞╮ 提交于 2020-04-05 17:07:21
1.注解的方式: @Select("select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment}") IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); 使用注解方式只需添加 ${ew.customSqlSegment}和@Param(Constants.WRAPPER)即可! 2.xml方式 IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); <!--xml--> <select id="selectPosts" resultType="com.example.entity.Post"> select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment} </select> 动态查找: @Select("select ${ew.SqlSelect} from ${tableName} ${ew

MySQL count知多少

旧巷老猫 提交于 2020-04-05 16:51:11
统计一个表的数据量是经常遇到的需求,但是不同的表设计及不同的写法,统计性能差别会有较大的差异,下面就简单通过实验进行测试( 大家测试的时候注意缓存的情况,否则影响测试结果 )。 1、 准备工作 为了后续测试工作的进行,先准备几张用于测试的表及数据,为了使测试数据具有参考意义,建议测试表的数据量大一点,以免查询时间太小,因此,可以继续使用之前常用的连续数生成大法,如下: /* 创建连续数表 */ CREATE TABLE nums(id INT primary key); /* 生成连续数的存储过程,优化过后的 */ DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1; TRUNCATE TABLE nums; INSERT INTO nums SELECT i; WHILE i < cnt DO BEGIN INSERT INTO nums SELECT id + i FROM nums WHERE id + i<=cnt; SET i = i*2; END; END WHILE; END$$ DELIMITER ; 生成数据,本次准备生成1kw条记录 /* 调用存储过程 */ mysql> call sp_createNum(10000000); Query OK

Hive学习笔记八

荒凉一梦 提交于 2020-04-05 16:48:04
目录 企业级调优 一、Fetch抓取 二、本地模式 三、表的优化 1、小表、大表Join 2、大表Join大表 3、MapJoin 4、Group By 5、Count(Distinct) 去重统计 6、笛卡尔积 7、行列过滤 8、动态分区调整 9、分桶 10、分区 四、数据倾斜 1、合理设置Map数 2、小文件进行合并 3、复杂文件增加Map数 4、合理设置Reduce数 五、并行执行 六、严格模式 七、JVM重用 八、推测执行 九、压缩 十、执行计划(Explain) 企业级调优 一、Fetch抓取   Fetch抓取是指, Hive中对某些情况的查询可以不必使用MapReduce计算。 例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台。   在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是 minimal,该属性修改为more以后,在全局查找、字段查找、limit查找等都不走mapreduce。 <property> <name>hive.fetch.task.conversion</name> <value>more</value> <description>

mysql(1)

心不动则不痛 提交于 2020-04-05 16:45:32
概念: 数据库(DataBase,DB): 指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的 数据集合 。(文件系统) 数据库:存储、维护和管理数据的集合。 登陆: mysq -u root -p 123 sql分类: DDL**(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP create tables mydb1; show tables; alter tables mydb1 character set utf8; drop tables mydb1; use mydb1; create table 表名( 字段1 字段类型, 字段2 字段类型, ... 字段n 字段类型 ); 常用数据类型: int:整型 double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99; char:固定长度字符串类型; char(10) 'abc ' varchar:可变长度字符串类型;varchar(10) 'abc' text:字符串类型; blob:字节类型; date:日期类型,格式为:yyyy-MM-dd; time:时间类型,格式为:hh:mm:ss timestamp:时间戳类型 yyyy-MM-dd hh:mm

数据库-存储过程

只愿长相守 提交于 2020-04-05 16:44:55
############### 存储过程 ############## """ 3.存储过程 那么什么是存储过程呢?怎么创建、查看和删除存储过程呢?存储过程有什么优点? 存储过程:类似于函数(方法),简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集合, 该语句集包括SQL语句(对数据的增删改查)、条件语句和循环语句等。 1. 查看现有的存储过程 show procedure status; 2 .删除存储过程 drop procedure 存储过程名称; 3. 调用 存储过程 call 存储过程名称(参数入/出类型 参数名 数据类型); ############################# 4.创建存储过程 # 1.体会封装 create procedure p1 () begin select * from account; end # 2, SQL 体会参数 create procedure p2(in i int,out n varchar(50)) begin select name into n from account where id = i; end -- 调用 set @name =null; CALL p2(1,@name); select @name; 注意1: mysql中有三种出入参数类型:分别为:1. in 入参类型 2.out

Mysql 解释计划字段说明

送分小仙女□ 提交于 2020-04-05 15:50:50
Mysql 解释计划 输出字段分为 id select_type table partitions type possible_keys key key_len ref rows filtered extra 1. select_type INSERT DELETE UPDATE 增删改 查有多个 查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询 1、SIMPLE:简单的select查询,查询中不包含子查询或者union (select * from atest1 t1 ) 2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary (select * from atest1 where id = (select id from atest2 ) ) 3、SUBQUERY:在select 或 where列表中包含了子查询 (同上) 4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在零时表里 2. table 表名 如果有别名,显示别名 3 partitions 查询使用到表分区的分区名。 4.type 核心属性 分为 system > const > eq_ref > ref > range > index > ALL 4.1 system: 无法重现 4.2 const

SQL server 一行拆多行

孤者浪人 提交于 2020-04-05 15:15:24
例如 根据dqty1 数值分行,并记录第几行 表 TID cname dqty1 A 2 B 3 C 4 在查询或者是视图中,怎么变成 cname dqty count A 2 1 A 2 2 B 3 1 B 3 2 B 3 4 C 4 1 C 4 2 C 4 3 C 4 4 ;WITH CTE AS ( SELECT cname,dqty1,dqty1 AS row FROM TID UNION ALL SELECT cname,dqty1,row-1 FROM CTE WHERE row>1 ) SELECT * FROM CTE ORDER BY CTE.cname,CTE.dqty1,CTE.row OPTION (MAXRECURSION 0) 来源: oschina 链接: https://my.oschina.net/ljfxp/blog/3215530

s高级ql

╄→гoц情女王★ 提交于 2020-04-04 22:50:31
#select的标量子查询 # 查询每个用户的订单数量 SELECT u.id,u.user_name,u.phone,(SELECT COUNT(1) FROM user_order uo WHERE uo.owner_id=u.id ) as num FROM sys_user u; #查询下过单的用户 SELECT u.id,u.user_name,u.phone FROM sys_user u WHERE EXISTS (SELECT id FROM user_order uo WHERE uo.owner_id=u.id ); SELECT u.id,u.user_name,u.phone FROM sys_user u WHERE u.id IN (SELECT DISTINCT uo.owner_id FROM user_order uo ); #查询各部分的工资比本部门平均工资高的人员 # 1查询各部门的平均工资 SELECT AVG( salary ) avgSal,emp.department_id FROM employees emp GROUP BY emp.department_id; # 2 将各部门的平均工资作为表关联 SELECT e.* FROM   employees e, ( SELECT AVG( salary ) avgSal, emp

Mysql 基础学习

萝らか妹 提交于 2020-04-04 18:36:29
-- 1 查询表中单个字段 SELECT `last_name` FROM `employees`; -- 2 查询表中多个字段 SELECT `last_name`,`email`,`department_id` FROM `employees`; # 3.查询表中所有字段 SELECT * FROM `employees`; # 4. 查询表中的常量值 SELECT 100; # 5. 查询表达式 SELECT 100%98; # 6.查询函数 SELECT VERSION(); # 7.起别名 SELECT 100%98 AS 结果; SELECT `last_name` AS 姓 FROM `employees`; # 8. 去重复--查询员工表中涉及到的部门编号 SELECT DISTINCT `department_id` FROM `employees`; # 9.+号的作用--查询员工名和姓连接成一个字段,并显示为 姓名 SELECT CONCAT(`last_name`,`first_name`) AS 姓名 FROM `employees`; # (二)条件查询 /* 语法 selcet 查询列表 from 表名 where 筛选条件 分类 一、按条件表达式筛选 条件运算符:<;>;!=;<=;>=; 二、按逻辑运算符,与或非 and or not