mysql使用的坑

一:

mysql默认是安装记录的物理顺序取数据的,如果不加order by 排序,可能得不到预期的结果。

(1) 获取 两个时间点的 id  (很快)

$sql = ‘select id from apply_info where create_time< {$now} limit 1’;   (要加  order by id desc)

获得 idNow

$sql = ‘select id from apply_info where create_time>= {$yesterday} limit 1’ (要加 order by id asc)

获得 idYt

(2) 每次取 1000

do{

select user_mobile,user_from from apply_info where  id <= {$idNow} limit 1000;

idNow -= 1000;

//toDo

} while (idNow >= idYt)

二:

当使用limit时,explain可能会造成误导

(1)explain估计行数,不考虑limit,可能会对查询估计过多的检查行数

(2)类似于SELECT ... FROM TBL LIMIT N这样的查询因为用不到索引将要报告为慢查询,(如果N不大,实际很快)

配置文件设置min-examined-row-limit=Num of Rows,检查的行数>=这个量的查询才会被报告为慢查询,避免误判

(3)类似于这样的select .. from tb where key_part1= ? order by key_part2 limit n,explain也要估计出过多的检查行数

时间: 2024-10-11 00:27:07

mysql使用的坑的相关文章

EF6(CodeFirst)+Mysql开发脱坑指南

废话 话说当年,在一个春光明媚的晌午,邂逅了迷人的丁香姑娘,从此拜倒在了她的石榴裙下,至今不能自拔,这位丁香姑娘就是ORM思想. 所谓ORM思想,我的理解就是根据一定的规则,把程序中的对象和数据库中的关系数据相互映射转换.在当年之前,我用ADO.NET编写数据持久层,拼接T-Sql语句,这是一个相当繁琐的过程,而且针对不同的数据库,还要调整T-Sql语句.记得,第一个网站上线的时候,数据库改成了MySql的,为了适配MySql,我改了两天的Sql语句.现在每每想起,都不禁摇头哂笑. ORM思想如

MySQL大小写补坑记

背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母.但问题是,Linux上数据库名和表名是区分大小写的,而Windows上是不区分大小写的.结果就是在看本地的数据库的时候,对着写的代码是小写的表名,后来传到服务器上却发现报错,几经审查才发觉是表名的大小写不统一的问题.真是天坑啊,坑了自己也坑了小伙伴.怎么办呢?代码已经比较多了,不太可能一下子就把代码里面的表名都改过来.网上看到说设置 lower_case_table_names 可以使Linux上的数据库表名不区分大小

MySQL auto_increment的坑

背景: Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引用). Innodb表定义中处理主键的逻辑是: 1.如果表定义了主键,就使用主键唯一定位一条记录 2.如果没有定义主键,Innodb就生成一个全局唯一的rowid来定位一条记录 auto_increment的由来: 1.Innodb强烈推荐在设计表中自定义一个主键,因为rowid是全局唯一的,所以如果有很多表没有定义主键,就会在生成rowid上产生争用. /* Dictionary sy

Mac安装mysql遇到的坑

使用XMPP前安装了mysql,小白遇到好多坑,不要见怪 mysql官网下载,选择Community中扩展名为dmg的文件 安装完成后要记住密码,重要的事情只说一遍,对了,安装时也没有偏好设置和自启动,私以为是一个pkg里都包括了 在终端修改.bash_profile文件,设置一些别名以便使用 命令行输入 sudo vi ~/.bash_profile 原始文件内容,不知道有何作用,也不敢删除,先注释掉 #[[ -s "$HOME/.profile" ]] && sou

下载安装mysql的一些坑

在mysql下载安装的过程中会有一些坑,另外navicat连接mysql数据库时也存在一定的坑,总结如下: 1.计算机中丢失某个dll文件 这个问题好解决,下载个文件就搞定了,下载地址:https://www.microsoft.com/en-US/download/details.aspx?id=48145 2.安装完成后,启动mysql报错 这是由于缺少了一个初始化的步骤,如下图: 然后就启动成功了,如下: 对了,如果想省事,不想cd到mysql安装目录下敲命令,可以直接把mysql安装目录

VS2015+MySql+EF6采坑经验总结

背景:VS2015+MySql+EF6(DB First) 采坑顺序:按照以前的记忆,操作依次如下: 1,安装 MySQL Connector/NET(不用想,装最新的,8.0.12) 2.安装 MySQL for Visual Studio (最新1.2.8) 3.在VS2015创建WEB项目 4.nuget 安装MySql.Data.Entity (最新6.10.8,会自动安装依赖包MySql.Data 6.10.8 和 EF 6.2.0) 雷区:下来,当然的要创建[ADO.NET实体数据模

从Oracle迁移到MySQL的各种坑及自救方案

当企业内部使用的数据库种类繁杂时,或者有需求更换数据库种类时,都可能会做很多数据迁移的工作.有些迁移很简单,有些迁移可能就会很复杂,大家有没有考虑过为了顺利完成复杂的数据库迁移任务,都需要考虑并解决哪些问题呢? 在以前的工作中,我迁移过Oracle到Informix.Oracle和SQLServer.Oracle到MySQL. 在目前的公司又因为去O的关系,做了大量的迁移工作,栽了不少坑,所以和大家交流一下在迁移的过程中的一些实践. 分享大纲: 去O前的准备与考虑 确定目标数据库 表和数据对象的

最近群里有人说面试中会遇到mysql这样的坑

写sql语句: 列出一个年级中每个班级前三名学生. 很多的人写的是: group by 班级名称 order by 分数 desc limit 3; 然后掉坑了. 其实就是一个: row_number() 函数可以解决. 但是mysql中没有这个函数. 以下给出一个示例: 1 -- 生成数据 2 DROP TABLE t1; 3 CREATE TABLE t1 ( 4 id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 5 grade TINYINT, 6 `

记录一下安装 mysql 的踩坑之路

坑点: 1.旧的mysql没有删除干净.在安装mysql的时候,没有注意到,在输入 "mysqld install" 指令时跳出来 exits,存在于另一个文件夹之中,这影响了后来的很多操作,包括root之后修改密码,但是一直显示密码不对,在网上搜的时候有一位朋友也遇到了同样的问题:    2.ini文件的配置,参考http://www.runoob.com/mysql/mysql-install.html,我还是在ini文件里配置了databases,如果要手动配置的话,一定要新建一

几个django 2.2和mysql使用的坑

可能是由于Django使用的MySQLdb库对Python3不支持,我们用采用了PyMySQL库来代替,导致出现各种坑,特别是执行以下2条命令的是时候: python manage.py makemigrations or python manage.py inspectdb 第一个坑(提示你的mysqlclient版本过低) 无聊你是否执行pip install mysqlclient安装的最新版的,都抛出: django.core.exceptions.ImproperlyConfigure