mysql - MySQL中用命令或函数查询执行情况

标签 mysql sql

如果我想在 b.int_name 与 c.d_name 或 c.b_name 或 d.syn 匹配时从表 a 和 b 中提取行,下面的查询是否正确?

SELECT DISTINCT a.n_id,
                a.dis,
                b.int_name
FROM cdb a,
     ct_int b,
     d_b c,
     d_syn d
WHERE a.dis LIKE '%hunt%' 
     && a.n_id=b.n_id 
     && b.int_name NOT LIKE 'NA' 
     && b.int_type NOT LIKE 'NA' 
     && (b.int_name NOT LIKE c.d_name
     OR b.int_name NOT LIKE c.b_name
     OR b.int_name NOT LIKE d.syn);

此查询执行花费了大量时间。如果我给出限制为 10 或 20 的上述查询,它很快就会出现,但如果没有限制,则会卡住很长时间,并且不知道它是否会给出结果。请这方面的指导。提前致谢...

最佳答案

首先,编写正确的连接,而不使用已弃用的语法,它将使您能够看到自己在做什么。

您当前正在连接 4 个表,且具有一个良好的连接条件。其余的连接将执行非常糟糕,特别是因为您正在执行看起来像“字符串不像字符串”的连接 - 规范化您的数据,并且永远不要在 varchar 上进行 jon ,除非您确实必须这样做。其次,在您的情况下, NOT LIKE 相当于 !=。使用它。

第二,

&& b.int_name NOT LIKE 'NA' 
&& b.int_type NOT LIKE 'NA' 

写成这样可能会更快

&& b.int_name != 'NA' 
&& b.int_type != 'NA' 

第三:post表结构和预期结果。也许有交叉连接的替代方案。

关于mysql - MySQL中用命令或函数查询执行情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400026/

相关文章:

mysql - 是否可以让 MySQL 在开发中使用单个文件?

sql - 了解表流程

php - mysql_query 在最新的 php 版本中不起作用

mysql - ADO.NET(Sql Compact + MySQL + IBM db2 expressC)

mysql - 如何将 show partition query 与 select 语句结合使用以获取最新分区与表名

sql - 如何在SQL查询中使用Oracle关联数组

mysql - sql子查询如何获取想要的值

MySQL 'AND' 子句没有正常运行

sql - 如何在 SQL select 语句中动态创建列

mysql - 如何减少需要运行多个搜索的耗尽 mysql 资源的长查询?