![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
in the way
这个作者很懒,什么都没留下…
展开
-
mysql动态字段行转列
动态行转列原创 2022-06-09 10:14:14 · 580 阅读 · 1 评论 -
mysql in查询太慢, 使用join优化
mysql中查询 in()参数太多, 导致查询很慢, 使用join优化。在实例中in查询话费2s, 优化后0.4sSELECT * from A LEFT JOIN B ON A.B_ID = B.IDwhere B.uuid in (001,002,003....)优化后SELECT * from A INNER JOIN ( select id from B where uuid = 001 union select id from B where uuid = 002 u原创 2020-10-23 18:04:00 · 1519 阅读 · 1 评论 -
mysql 查询分组里的第n条数据,前n条数据
SELECT uName, sex, salary, addressFROM ( SELECT uName, sex, salary, address, # 如果临时变量等于 address, 就+1, 否则从1开始 IF(@tmpAddress = address, @rank:=@rank + 1, @rank:=1) as new_rank, @tmpAddress := address AS tmpAddress #定义临时变量 FROM (SELECT * FROM pers原创 2020-08-06 19:07:55 · 653 阅读 · 0 评论 -
mysql sql执行慢示例分析
mysql> CREATE TABLE `table_a` (`id` int(11) NOT NULL,`b` varchar(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `b` (`b`)) ENGINE=InnoDB;执行sql, mysql> select * from table_a where b=‘1234567890abcd’;假设现在表里面,有 100 万行数据,其中有 10 万行数据的 b 的值是’1234567890’,原创 2020-06-06 10:39:22 · 214 阅读 · 0 评论 -
mysql random取数据最快方法
在mysql中通过sql语句获取随机数据的方式如下, 经测试,在1000W数据的表中,执行速度在10多毫秒SELECT * FROM user1 AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM user1) – (SELECT MIN(id) FROM user1)) + (SELECT MIN(id) FROM user1)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT原创 2020-06-06 10:06:53 · 2445 阅读 · 0 评论 -
mysql count效率
对于 count(主键 id) 来说,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。对于count(1) 来说,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。单看这两个用法的差别的话,你能对比出来,count(1) 执行得要比 count(主键 id) 快。因为从引擎返回 id 会涉及到解析数据行,以及..原创 2020-05-31 11:01:30 · 165 阅读 · 0 评论 -
mysql Using join buffer (Block Nested Loop) join连接查询优化
问题: mysql Using join buffer (Block Nested Loop) join连接查询优化。优化方案:在链表查询中, 确保被驱动的表被索引, 如下t2表的 t1_id 需要创建索引select t1.a t2.id from t1 left join t2 on t2.t1_id = t1.id MySQL使用嵌套循环算法来实现多表之间的联接。结论:嵌套...原创 2020-03-24 14:08:31 · 2612 阅读 · 0 评论 -
mysql使用强制索引
单表: select a from t FORCE INDEX(idx_name) WHERE name = ‘小明’连表:select * from t1 LEFT JOIN t2 FORCE INDEX(t2_idx_name) on t1.id = t2.t1_id原创 2020-03-24 13:44:22 · 312 阅读 · 0 评论 -
数据库插入两条一样数据解决方案
1,问题如下图同时保存了2条一样的数据。2个线程, A去查是否有10001的用户时,返回没有,就去保存用户。B在A保存之前也去查询, 发现没有此用户, 就又保存了一次。2, 单机版解决方案在save方法上加锁即可3, 集群版解决方案给数据库的字段设置唯一性给user_id设置唯一性 ALTER TABLE activity_wheel_address ADD unique(`u...原创 2019-12-26 13:42:19 · 5722 阅读 · 0 评论 -
Mysql 使用关联查询代替子查询
在查询时尽量不要在sql内使用子查询, 将子查询改为关联查询 速度更快。SELECT * FROM `dept_a` where id in (SELECT MAX(id) from dept_a GROUP BY source);SELECT A.* from dept_a AINNER JOIN (SELECT MAX(id) id, source from dept_a G...原创 2019-11-20 09:13:06 · 1275 阅读 · 3 评论 -
mysql 全关联
SELECT a.name, b.sex, a.source from dept_a a LEFT JOIN dept_b b on a.source = b.sourceUNIONSELECT a.name, b.sex, b.source from dept_a a right JOIN dept_b b on a.source = b.source结果查询结果...原创 2019-11-20 09:07:01 · 293 阅读 · 0 评论 -
往a表插入a表在b表中的不存在数据
-- 往a表插入a表在b表中的不存在数据(id判断)INSERT into table_A (B_id,col_a,col_b,col_c,status)SELECT id, col_a, col_b, col_c from table_B as bwhere NOT EXISTS( SELECT 'X' FROM table_A as a where a.B...原创 2019-09-27 11:51:08 · 855 阅读 · 0 评论 -
Mysql表设计规范
1、单库表别太多,一般保持在200以下为宜。2、尽量避免SQL中出现运算,让DB功能单一化。3、表设计尽量小而精,能用5个字段就不要用6个(不绝对,取决于业务,改冗余时坚决不要手软)4、SQL事物不能设计太大,比如一次性提交10W条insert,一般来说insert事物的话,5K~1W来做批处理就可以了。5、设计表时尽量用“小数据类型”,比如尽量避免text,blob等这些大家伙,...原创 2019-09-11 17:46:55 · 161 阅读 · 0 评论