SQL
遇星
我想成为我自己
展开
-
MySQL count(*),count(1),count(主键),count(字段)哪一个更快
假设有下面一个表:Create Table: CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,col1 int(11) DEFAULT NULL,PRIMARY KEY (id),KEY idx_col1 (col1)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4下面几个统计表总数的SQL哪一...原创 2019-04-10 16:03:54 · 3279 阅读 · 2 评论 -
MySQL 固定分隔符列转行
有如下一个表,需要将tag列的每个标签都提取出来,一行对应一个标签mysql> select * from user_tag;+--------+-----------------+| userid | tag |+--------+-----------------+| 1 | css,go || 2 | mysql...原创 2019-05-16 10:16:44 · 2701 阅读 · 3 评论 -
MySQL 行转列
假如有一个成绩表tom,如下mysql> select * from tom;+------+---------+-------+| name | subject | score |+------+---------+-------+| sam | english | 100 || sam | math | 100 || sam | chinese | ...原创 2019-05-20 11:17:12 · 219 阅读 · 0 评论 -
MySQL 利用延迟关联优化分页查询
通常会有一些起点巨大的分页查询,效率低下,例如:select * from tab where create_date>'2018-12-20 13:20:10' and create_date<'2019-05-01 14:00:00' order by id limit 328000,10;假设tab是一个数据量非常大的表,且满足条件create_date>'2018-1...原创 2019-05-05 14:00:19 · 841 阅读 · 0 评论 -
在二级索引里,对于相同的索引键,附带的主键是有序的还是无序呢
在设计索引的时候,有个问题卡住了:在二级索引里,索引块里除了索引键,后面还附带主键。而且我们都知道,等值查询可以利用索引上的索引键和附带的主键而避免回表。但是对于多个相同的索引键,在索引块里,后面附带的主键是有序的还是无序呢?例如有如下一个表:CREATE TABLE `test` ( `id` int(11) NOT NULL, `col1` varchar(10) DEFAULT...原创 2019-04-12 14:34:03 · 2361 阅读 · 4 评论 -
insert into ... on duplite key update和replace into
本文先介绍insert into … on duplite key update和replace into各自的作用及用法。1.insert into … on duplite key update …作用:插入一行数据,如果数据重复了(根据主键或者唯一键来判断),就进行相应的更新。需要注意的是,数据是否重复,是根据表上的主键或者唯一键来判断的,如果表上没有主键或者唯一键,那么可以认为任何数...原创 2019-04-01 13:42:15 · 1938 阅读 · 0 评论 -
timestampdiff的一个BUG
发现一个timestampdiff无法正确判断列值的BUG,看下面例子:--测试表如下:mysql> select * from test;+----+---------------------+| id | col2 |+----+---------------------+| 1 | 2019-03-20 00:00:00 || 2 | 2...原创 2019-04-01 17:08:50 · 2678 阅读 · 0 评论 -
研究一条distinct+order by+limit的SQL执行过程,发现limit影响排序结果的彩蛋
假设有如下表:mysql> select * from tab;+----+------+| id | col1 |+----+------+| 1 | 2 || 2 | 2 || 3 | 5 || 4 | 3 || 5 | 3 || 6 | 4 |+----+------+6 rows in set (0.01 sec...原创 2019-04-02 13:35:01 · 2829 阅读 · 1 评论 -
从一个SQL看in和exists的隐式转换
遇到一个SQL,学习到了一些关于in和exists隐式转换的优化知识。SELECT DISTINCT t1.differ_code as differCode, t1.relative_code AS relativeCode, t2.deli_store_c...原创 2019-04-04 10:05:54 · 590 阅读 · 0 评论 -
从一次SQL改写体会exists相关子查询的代价及MySQL优化器的“聪明之处”
最近在改写一条SQL,体会到了exists相关子查询的缺点,以及优化器聪明地根据统计信息选择了最优的执行计划。原SQL如下:SELECT DISTINCT bp_code as userCode FROM tab WHERE ( (primary_type = 'per...原创 2019-04-09 10:45:48 · 189 阅读 · 0 评论 -
MySQL 排名问题
MySQL要实现排名,可以借助变量。例如下面的score表,需要分别对数学和英语成绩排名,mysql> select * from score;+----+--------+-------+---------+| id | xm | math | english |+----+--------+-------+---------+| 11 | 张三 | 78.00 ...原创 2019-05-16 10:54:18 · 640 阅读 · 0 评论