首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

敖丙工作以来总结大厂SQL调优姿势

SQL规范性检查 每个公司都有自己MySQL开发规范,基本上大同小异,这里罗列一些比较重要,我工作期间经常接触给大家。...子查询 由于MySQL基于成本优化器CBO对子查询处理能力比较弱,不建议使用子查询,可以改写成Inner Join。...索引检查 索引属性 索引基数指的是被索引列唯一值个数,唯一值越多接近表count(*)说明索引选择率越高,通过索引扫描行数就越少,性能就越高,例如主键id选择率是100%,在MySQL中尽量所有的...MySQL遵循是索引最左匹配原则,对于复合索引,从左到右依次扫描索引列,到遇到第一个范围查询(>=, >,<, <=, between ….. and ….)就停止扫描,索引正确索引顺序应该是index...CBO执行计划,两者做对比分析差异,弄清楚自己选择和CBO不同,不但能够编写高质量SQL,同时也能清楚CBO工作原理。

64910
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 8.0 新特性之统计直方图

利用直方图,用户可以对一张表一列做数据分布统计,特别是针对没有索引字段。这可以帮助查询优化器找到更优执行计划。统计直方图主要使用场景是用来计算字段选择性,即过滤效率。...所以下面第一个查询会比第二个查询返回更多行数: 1) SELECT * FROM bedtime WHERE time_of_day BETWEEN "22:00:00" AND "23:59:00"...2) SELECT * FROM bedtime WHERE time_of_day BETWEEN "12:00:00" AND "14:00:00" 如果没有统计数据,优化器会假设time_of_day...主要原因是,查询语句中谓词“web_page.wp_char_count BETWEEN 5000 AND 5200”。...|   Query 61 查询如下:在给定年份和月份,有和没有广告宣传情况下货物售卖比率。

2K40

SQL学习之MYSQL常用命令和增删改查语句和数据类型

注:如指定文件不存在,mysql会自动添加一个文件,此命令不能加分号结尾(文件没有备份建数据库操作)  8.导入数据库备份文件:  (1).在mysql命令窗口  (2).新建一个要导入数据库(因为备份中没有备份建数据库操作...;  2)占用磁盘空间;  3)增加查询优化器负担;  当查询优化器生成执行计划时,会考虑索引,太多索引会给查询优化器增加工作量,导致无法选择最优查询方案;  16、分析索引效率  方法:在一般...类型,如果没有限制,输出可能会很长;  21、使用查询缓存  1)查询缓存工作方式:  第一次执行某条select语句时,服务器记住该查询文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果...没有参数FLOAT或有<24 一个参数表示一个单精密浮点数字。   DOUBLE[(M,D)] [ZEROFILL]   一个正常大小(双精密)浮点数字。不能无符号。...支持范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

2.4K60

MySQL基本查询

,可以选择进行同步更新操作语法: INSERT .......]; 注意:没有 ORDER BY 子句查询,返回顺序是未定义,永远不要依赖这个顺序 案例: 1 同学及数学成绩,按数学成绩升序显示 mysql> select name,math from...对查询结果进行列值更新 1 将孙悟空同学数学成绩变更为 80 分 mysql> update exam_result set math=80 where name = '孙悟空'; Query...SUM([DISTINCT] expr) 返回查询数据 总和,不是数字没有意义 AVG([DISTINCT] expr) 返回查询数据 平均值,不是数字没有意义 MAX([DISTINCT...] expr) 返回查询数据 最大值,不是数字没有意义 MIN([DISTINCT] expr) 返回查询数据 最小值,不是数字没有意义 案例: 1 统计成绩表里共有多少同学 -- 使用

19770

如何写出一手好 SQL ?很有必要!

MySQL没有限制单表最大记录数,它取决于操作系统对文件大小限制。...MySQL会为每个连接提供缓冲区,意味着消耗更多内存。如果连接数设置太高硬件吃不消,太低又不能充分利用硬件。...全文索引:用于海量文本查询MySQL5.6之后InnoDB和MyISAM均支持全文索引。由于查询精度以及扩展性不佳,更多企业选择Elasticsearch。...-07-01'; date_format函数会导致这个查询无法使用索引,改写后: select id from order where create_time between '2019-07-01 00...:00:00' and '2019-07-01 23:59:59'; 避免Select all 如果不查询表中所有的列,避免使用 SELECT *,它会进行全表扫描,不能有效利用索引。

50110

快速学习-Presto上使用SQL遇到

所以定时归档是一个很好选择,这里还要注意,在归档时候我们要选择一个归档字段,如果是按日归档,我们可以用日期作为这个字段值,采用yyyyMMdd形式,例如20180123...._2 WHERE b3 between 20180101 and 20180131 ) /*最后一个子查询后不要带逗号,不然会报错。...5.5 只查询需要字段 一定要避免在查询中使用 SELECT *这样语句,换位思考,如果让你去查询数据是不是告诉你越具体,工作效率越高呢。...对于我们数据库而言也是这样,任务越明确,工作效率越高。 对于要查询全部字段需求也是这样,没有偷懒捷径,把它们都写出来。.../*MySQL写法*/ SELECT t FROM a WHERE t > '2017-01-01 00:00:00'; /*Presto中写法*/ SELECT t FROM a WHERE

4.2K30

MySQL 大表如何优化查询效率?

MySQL 大表如何优化查询效率? 背景 XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警意思是存在一定主从延迟。...) from arrival_record where product_id=26 and receive_time between '2019-03-25 14:00:00' and '2019-03...②传入过滤条件: where product_id=26 and receive_time between '2019-03-25 14:00:00' and '2019-03-25 15:00:00...现在已经知道了在慢查询中记录 select arrival_record where 语句传入参数字段有 product_id,receive_time,receive_spend_ms,还想知道对该表访问有没有通过其他字段来过滤了...data/3308/test/arrival_record.ibd 没有碎片,和mysql该表大小一致 cp -rp /datas/mysql/data/3308 /datas 分别使用 online

9610

MySQL数据库基础知识_MySQL数据库特点

数据库中哭名称应该以英文字符或者一些符号起始,但是不允许以数字起始 mysql数据库中哭名称、表名称、字段名称都不能使用mysql关键字,比如create、database;如果非要使用,那就用反引号括起来...日期和时间类型 表示时间值日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR 每个时间类型有一个有效值范围和一个”零”值,当指定不合法MySQL不能表示值时使用”零...这说明它们没有字符集,并且排序和比较基于列值字节数值值。 BLOB 是一个二进制大对象,可以容纳可变数量数据。...] tb_stu values (1,“韩云溪”,21,“2000-03-19 12:00:00”); 多行插入: insert [into] tb_name values(val1,val2…),...,符合则显示,不符合则忽略 between A and B 使用:查询范围介于AB两者之间项 select * from tb_name where id between 1 and 3;

6.2K20

Solr与MySQL查询性能对比

在项目中一个最常用查询查询某段时间内数据,SQL查询获取数据,30s左右 SELECT * FROM `tf_hotspotdata_copy_test` WHERE collectTime BETWEEN... '2014-12-06 00:00:00' AND '2014-12-10 21:31:55'; 对collectTime建立索引后,同样查询,2s,快了很多。...看看只获取ID需要时间: SQL查询只返回id,没有对collectTime建索引,10s左右: SELECT id FROM `tf_hotspotdata_copy_test` WHERE collectTime... BETWEEN '2014-12-06 00:00:00' AND '2014-12-10 21:31:55'; SQL查询只返回id,同样查询条件,对collectTime建索引,0.337s,很快...方式,如果一次性要获取大量查询数据就用export方式,这里没有采用MySQL查询字段建索引,因为数据量每天还在增加,当达到亿级数据量时候,索引也不能很好解决问题,而且项目中还有其他查询需求。

1.4K30

MySQL亿级大表优化实战....

select xxx_record 语句 select arrival_record 慢查询语句都类似于如下所示,where 语句中参数字段是一样,传入参数值不一样: select count(*...) from arrival_record where product_id=26 and receive_time between '2019-03-25 14:00:00' and '2019-03...②传入过滤条件: where product_id=26 and receive_time between '2019-03-25 14:00:00' and '2019-03-25 15:00:00...现在已经知道了在慢查询中记录 select arrival_record where 语句传入参数字段有 product_id,receive_time,receive_spend_ms,还想知道对该表访问有没有通过其他字段来过滤了...data/3308/test/arrival_record.ibd 没有碎片,和mysql该表大小一致 cp -rp /datas/mysql/data/3308 /datas 分别使用 online

1K50

就遇到上亿(MySQL)大表优化

from arrival_record where product_id=26 and receive_time between ‘2019-03-25 14:00:00’ and ‘2019-03-25...15:00:00’ and receive_spend_ms>=0\G select arrival_record 语句在mysql中最多扫描行数为5600万、平均扫描行数为172万,推断由于扫描行数多导致执行时间长...传入过滤条件 where product_id=26 and receive_time between ‘2019-03-25 14:00:00’ and ‘2019-03-25 15:00:...,导致扫描行数很多,执行时间长 receive_time字段基数大,选择性好,可对该字段单独建立索引,select arrival_record sql就会使用到该索引 现在已经知道了在慢查询中记录...data/3308/test/arrival_record.ibd 没有碎片,和mysql该表大小一致 cp -rp /datas/mysql/data/3308 /datas 分别使用online

21610

Oracle数据库之第一篇

注意:*、包含null 表达式都为null *、空值永远不等于空值 11  连接符|| 字符串连接查询 Mysql 中实现方法: 查询雇员编号,姓名,工作 编号是:7369...sal<3000 11 Between and 等于sal > =1500 and sal <= 3000 范例:查询1981-1-1 到1981-12-31 号入职雇员 分析:between...选择雇用时间在1998-02-01到1998-05-01之间员工姓名,job_id和雇用时间 5. 选择在20或50号部门工作员工姓名和部门号 6....选择在1994年雇用员工姓名和雇用时间 7. 选择公司中没有管理者员工姓名及job_id 8. 选择公司中有奖金员工姓名,工资和奖金级别 9....选择员工姓名第三个字母是a员工姓名 10. 选择姓名中有字母a和e员工姓名 11. 显示系统时间 12.

3.3K10
领券