mysql随机获取指定数量数据

 通常情况下我们在开发项目中一般会用到 随机推荐 或者 购买类 需求,一般情况下很多程序猿都是 正序 或者 倒叙 获取 然后随机返回给前端,这种方式有 很多缺陷。解决方案 下面我们分享一种直接从 mysql 数据库中随机获取数据的一种方式。编写最大id查询sqlSELECT MAX(id) FROM `user`编写joinINNER JOIN ( SELECT ROUND( RAND( ) * ( ( SELECT MAX( id ) FROM `bl_user` ) ) ) AS id ) AS u2 ON u.id >=`u2`.`id` 编写要获取的随机条数LIMIT 50完整实例SELECT * FROM `user` `u` INNER JOIN ( SELECT ROUND( RAND( ) * ( ( SELECT MAX( id ) FROM `user` ) ) ) AS id ) AS u2 ON u.id >= `u2`.`id` LIMIT 50 以上sql主要实现了完全从随机位置取 指定条数 的记录来实现 随机 获取...

数据库,解决方案 2023-04-11 PM 307次 0条

mysql服务器io飚满百分之百的案例分析

mysql飚满问题有一台 mysql 5.7.1 的数据库实例以写入为主,IO 飙到接近100%,可以看到 写入 IOPS 很也高分析mysql飚满问题过程通过 iotop 工具可以看到当前 IO 消耗最高的 mysql 线程查看线程49342的堆栈,可以看到正在进行redo log的刷新,对应的是9号文件9号文件对应的是redo log的第一个文件 为什么 mysql 进程会频繁的刷新 redolog 文件,要结合 redolog 的刷盘策略来分析,关键是 innodb_flush_log_at_trx_commit 参数,默认是1最安全,但在写压力大的情况下,也会带来较大的性能影响,每次事务提交时 mysql 都会把 log buffer 的数据写入 log file 并且 flush (刷到磁盘)中去。 结合这个集群的写入场景来看,大部分都是小事务的写入,每次事务提交都会触发刷盘动作,这种场景下通过增大 innodb_log_buffer_size 和 innodb_log_file_size 的优化效果不明显。mysql飚满优化方案应用层面,对于写压力大的系统,可以将单条...

数据库 2021-10-28 PM 900次 0条

mysql自增列并发插入死锁问题

 今天有一个朋友问我了一个问题意思是假设我们有一张表需要每天 定时迁移数据 那么我们在进行迁移的时候某些环境下就会触发自增列 并发插入死锁 问题如下。mysql 死锁问题测试  触发 死锁问题 采用一下 sql 进行 测试 复现insert into data_cache (customerID,organizationID,createTime) ( select customerID,organizationID,createTime from data where DATE(createTime) <= DATE(?) and autoIndex >= ? and autoIndex <= ? ); 大致意思是根据 autoIndex 去判定那些数据需要迁移,在程序中已经分好区域了,比如 1~100 , 101~200 , 201~300 这些,两张表的数据表结构均一致如下CREATE TABLE `data` ( `customerID` varchar(50) NOT NULL COMMENT '客户编号...

数据库 2021-10-19 PM 403次 0条

mysql字段数据为null时反查询不到

 当我们通过 mysql 使用 NOT IN 查询时,如果条件字段可以为 NULL 并且值为NULL需要特别注意一下这个时候使用 NOT IN 查询时是查询不到的。测试NULL时反查询不到例子假如我们现在有一个表 useridnickname1张三2李四3NULL4王五现在我们查询用户名不是 张三 和 李四 的用户select * from users where user_name not in ('张三','李四');这个时候我们应该得到的是两条数据idnickname3NULL4王五但是结果却只有一条数据idnickname4王五分析测试NULL时反查询不到问题 这是因为 mysql 中 not in 使用的是 不相等(!=) 比较,即每条记录的 user_name 都和 张三, 李四 进行数据比较。foreach ($user_names as $user_name) { if ($user_name != '张三' && $user_name != '李四') { return true; // 符合条件 }...

数据库 2021-09-28 PM 494次 0条

mysql数据库表重置主键

 mysql数据库表重置主键解决数据表频繁删除新增主键不断自增问题。 比如我们现在有一个 用户访问日志记录表 ,通过程序 不断的记录用户访问信息 ,因为数据量比较大所以我们 只保存1个月内的日志 ,所以要对一个月之前的 数据删除 ,时间久了就会发现 主键不断在增大 ,根据主键类型不同,如果不做任何处理的话,很有可能会达到 主键值的最大长度 ,这个时候数据库就可能会 出现问题。 根据以上问题我们可以通过 定期重置主键 进行解决mysql重置主键ALTER TABLE table_name AUTO_INCREMENT= 1; 通过以上 sql 我们可以将主键重置为 1 ,也可以根据需求进行调整 1 100 1000 等等 关于怎么解决主键不断增加,mysql数据库表重置主键怎么解决已经介绍完毕了。

数据库,解决方案 2021-09-25 AM 437次 0条

typecho找回后台管理员密码

使用 typecho 时很多时候我们不经常登录 typecho 管理员后台,时间长了发现 typecho 后台管理员密码给忘了,这个时候跟焦虑了,下面将解决 typecho 找回后台管理员密码我们先找到 typecho 安装数据库然后找到并编辑 typecho 数据库 typecho_users 表 password 字段 我们只需要将 password 字段内容改为一下数据即可e10adc3949ba59abbe56e057f20f883e这个时候我们就已经找回 typecho 后台管理员密码了123456 关于 typecho 忘记管理员帐号密码怎么办, typecho 找回后台管理员密码,已经解决了

解决方案,其他 2021-09-13 PM 1016次 0条

mysql数据库开启慢查询日志

首先我们要知道为什么要开启 mysql慢查询日志 开启 慢查询日志 它能记录下所有执行超过 long_query_time 时间的SQL语句,能够帮助开发人员,运维人员快速的找到执行慢的SQL语句,方便我们对这些SQL语句进行进一步优化,从而增强数据库性能。 今天我们要讲的主角就是 mysql慢查询日志。mysql开启慢日志版本要高于mysql5.6以上SELECT VERSION(); #查询版本号 # 或者 show variables like '%version%' #查询版本号mysql 慢查询日志 相关参数说明slow_query_log #慢查询开启状态,ON开启,OFF关闭 slow_query_log_file #慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time #查询超过多少秒才记录,默认10s,查询命令 SHOW VARIABLES LIKE 'long_query_time'; log_queries_not_using_indexes = 1 #表明记录没有使用索引的...

数据库,解决方案 2021-08-08 PM 1029次 0条