AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 19661
Accepted
user4951
user4951
Asked: 2012-06-22 05:56:42 +0800 CST2012-06-22 05:56:42 +0800 CST 2012-06-22 05:56:42 +0800 CST

由于简单地删除了一个附加约束,限制较少的查询返回较少的结果

  • 772

看看这个查询

SELECT DISTINCT
  TB.ID,
  TB.Latitude,
  TB.Longitude,
  111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
  `tablebusiness` AS TB
   join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
   GeomFromText ('MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672  106.81978308133)'),
   TA.Latlong
   )
   AND
MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE)
ORDER BY
  Distance
LIMIT
  0, 20

这基本上是搜索所有 TA.LatLong 在“MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672 106.81978308133)”框中的公司,之后该框必须包含 kucing

这将返回 22 行。

现在将其与此查询进行比较

SELECT DISTINCT
  TB.ID,
  TB.Latitude,
  TB.Longitude,
  111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
  `tablebusiness` AS TB
   join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
   GeomFromText ('MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672  106.81978308133)'),
   TA.Latlong
   )
ORDER BY
  Distance
LIMIT
  0, 20

这是相同的查询,但限制较少。现在我只想检查业务是否在框中。这就对了。是的,那些盒子里有企业。其中大部分不包含“kucing*”字样

应该有更多的查询。然而,更少。第二个查询返回 null。LESS 限制性查询返回 LESS 结果。

罗兰多一口气回答得很好。

带有 MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE) 的那个是可以正常工作的那个。

我在问为什么没有的那个是有问题的。罗兰多似乎试图纠正正确的。

注意:(我想知道这是否应该是另一个问题)。听别人说后我试过:删除不同的

SELECT 
  TB.ID,
  111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
  `tablebusiness` AS TB
  join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
  MBRContains(
        GeomFromText (
            'MULTIPOINT(-6.1939967464102 106.76400325359,-6.1760032535898 106.78199674641)'
            ),
            TA.Latlong) 
AND TA.Prominent >15
ORDER BY
  Distance
LIMIT
  0, 20

返回 0 行

然后我尝试删除订单和限制

SELECT 
  TB.ID,
  111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
  `tablebusiness` AS TB
  join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
  MBRContains(
        GeomFromText (
            'MULTIPOINT(-6.1939967464102 106.76400325359,-6.1760032535898 106.78199674641)'
            ),
            TA.Latlong) 
AND TA.Prominent >15

这也导致 0 行最后我使用原始查询并确保我只删除

    AND
MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE)

将结果从一些结果变成没有结果

最后我使查询变得非常简单

SELECT BusinessID, Prominent
FROM
    tableauxiliary as TA
WHERE
  MBRContains(GeomFromText ('MULTIPOINT(-6.2209869856406 106.73701301436,-6.1490130143594 106.80898698564)'),TA.Latlong)

这就是有史以来最基本的查询。

仍然没有返回结果

现在这是一个奇迹。我添加了 2 个字符,它再次起作用。我添加的字符是=1

SELECT BusinessID
FROM tableauxiliary AS TA
WHERE MBRContains( GeomFromText( 'MULTIPOINT(-6.2209869856406 106.73701301436,-6.1490130143594 106.80898698564)' ) , TA.Latlong )
 =1

我得到了结果

我想是时候报告错误了。

mysql mysql-5.5
  • 2 2 个回答
  • 625 Views

2 个回答

  • Voted
  1. RolandoMySQLDBA
    2012-06-22T10:20:24+08:002012-06-22T10:20:24+08:00

    FULLTEXT 索引对于 MySQL 查询优化器来说非常有趣。我之前写过:

    • https://stackoverflow.com/a/6092216/491757(2011年 5 月 23 日)
    • 在条件为“字数”的 BOOLEAN MODE 中忽略全文索引(2011 年 10 月 25 日)
    • Mysql全文搜索my.cnf优化(2012年1月26日)
    • MySQL EXPLAIN 不显示 FULLTEXT 的“使用索引”(2012 年 5 月 7 日)

    尝试重构您的第一个查询,以便 FULLTEXT 子句和 Spatial 子句不会在 EXPLAiN 计划的同一级别执行。

    SELECT * FROM
    (
        SELECT DISTINCT
            TB.ID,
            TB.Latitude,
            TB.Longitude,
            111151.29341326*SQRT(pow(-6.185-TB.Latitude,2) + 
            pow(106.773 - TB.Longitude,2)*0.98839228980165) AS Distance
        FROM
        (
            SELECT * FROM `tablebusiness`
            WHERE MATCH (FullTextSearch) AGAINST
            ('kucing*' IN BOOLEAN MODE)
        ) AS TB
        join 
        (
            SELECT ID FROM tableauxiliary
            WHERE MBRContains(GeomFromText ('MULTIPOINT
            (-6.2317830813328 106.72621691867,-6.1382169186672 106.81978308133)'),TA.Latlong)
        ) as TA
        on TA.BusinessID=TB.ID
        ORDER BY
            Distance
    ) AA LIMIT 0, 20;
    
    • 4
  2. Best Answer
    ypercubeᵀᴹ
    2012-06-26T05:01:32+08:002012-06-26T05:01:32+08:00

    如果第二个(确实限制较少)查询返回零行,而第一个查询返回多于零行,那么这是一个错误。

    首先检查是否可以只用表重现错误。如果在您删除DISTINCT和/或ORDER BY ... LIMIT.

    然后尝试编写重现错误的语句集(CREATE表、INSERT行和 2 个查询,尽可能简化),以便其他人可以测试。

    然后就可以提交给MySQL了。

    • 3

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve