Py学习  »  The Impaler  »  全部回复
回复总数  4
4 年前
回复了 The Impaler 创建的主题 » 从匹配行中选择最高ID的高性能MySQL查询

您可以做一些更改来提高查询的性能。我要尝试的第一个方法是移除 OR 运算符并添加索引。

卸下OR运算符

使用 UNION .例如:

select * from (
  select *
  from mytable 
  where thing = 'foo' and used is null and stime = 0 and ~flags & 1
  order by id desc
  limit 1
) z
union all
select * from (
  select *
  from mytable
  where thing = 'bar' and used is null and stime = 0 and ~flags & 1
  order by id desc
  limit 1
) y 
order by id desc
limit 1;

以下索引可以帮助优化器:

create index ix1 on mytable (thing, stime, used, flags, id);

还有进一步的优化可以应用,但你可以开始尝试这个。

6 年前
回复了 The Impaler 创建的主题 » 如何使用MySQL使用经度和纬度列查找行之间的距离?

首先,我将Haversine函数实现为MySQL函数,如:

create function haversine_distance (
  float long1, 
  float lat1,
  float long2,
  float lat2)
returns float deterministic
return ... -- formula here

一旦有了它,查询就变得非常简单。例如经度 10.21 /纬度 -50.45 ,查询将如下所示:

select *
from my_table
order by haversine_distance(long, lat, 10.21, -50.45) asc
6 年前
回复了 The Impaler 创建的主题 » 插入mysql 2记录,第二条记录引用记录1中新创建的id?

不,不能在 单一的 查询。

MySQL没有实现 标准 此查询所需的“可延迟约束”的SQL功能( INSERT )为了成功。不过,在postgresql或oracle中也可以找到解决方案。

这在mysql中是不可能实现的,因为在插入第二行的过程中,它的外键约束将失败,因为第一行还没有“正式”存在——尽管已经插入。但是,如果FK约束检查推迟到SQL语句结束(或事务结束),查询将成功完成…但这并没有在mysql中实现。

6 年前
回复了 The Impaler 创建的主题 » mysql脏读与sql标准中定义的脏读

mysql的定义是 例1 脏读:当行已经存在(但由T1更新)而T2读取它时的情况。然后,如果T1回滚,T2可能对它执行了错误的计算。丑陋的

sql定义涵盖了更多的情况。例如当行 正在被 第一次由T1创建(但尚未提交),然后由T2读取。在这种情况下,如果事务T1回滚,就好像该行从未存在过…但是t2已经在使用它了,谁知道它的用途是什么。丑陋的

总之,这两种情况都是丑陋的,可能导致不一致。sql定义比mysql更全面。