Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery MySQL查询以获取exists/not exists的任意组合_Jquery_Mysql_Sql_Optimization - Fatal编程技术网

Jquery MySQL查询以获取exists/not exists的任意组合

Jquery MySQL查询以获取exists/not exists的任意组合,jquery,mysql,sql,optimization,Jquery,Mysql,Sql,Optimization,我有一个有3列和数百万行的表。都是整数散列 id、属性、属性 id可以有多个包含属性名称和值组合的行 这张桌子有两把钥匙 id、属性、属性 属性,属性,id 我需要动态构建能够根据规则获取ID的查询,例如: 以下所有部分应匹配的ID: 属性包含值或值 属性不包含值或值 ... 以下任何部分应匹配的ID: 属性包含值或值 属性不包含值或值 ... 问题是: 这是我提出的查询,我可以将更改为id NOT in for the NOT contain parts,并将和更改为或从或更改为任何:

我有一个有3列和数百万行的表。都是整数散列 id、属性、属性

id可以有多个包含属性名称和值组合的行

这张桌子有两把钥匙 id、属性、属性 属性,属性,id

我需要动态构建能够根据规则获取ID的查询,例如:

以下所有部分应匹配的ID: 属性包含值或值 属性不包含值或值 ...

以下任何部分应匹配的ID: 属性包含值或值 属性不包含值或值 ...

问题是: 这是我提出的查询,我可以将更改为id NOT in for the NOT contain parts,并将和更改为或从或更改为任何:

问题是这个查询效率不高。 出于某种原因,Mysql扫描所有表行,尽管我单独运行每个子查询时,它只包含几百行

我如何优化这个查询,或者提出一个可以有效处理灵活需求的替代查询。 注:1。Mysql 5.5.31 2。为了便于解释,我简化了查询。实际上,还有一个附加的全局sid列,所有查询在每个where段中都包含sid=XXX。

我建议使用group by并具有:


使用联接比使用嵌套的select语句更有效。我建议从那里开始,看看你有什么改进。不要用在选择,使用JOIN。这是一个很好的解决方案戈登,谢谢,有没有办法做到属性不包含值或者没有“包含”部分?我不认为它会起作用,因为WHERE部分和HAVING部分是否定的。这是一个低效的解决方案,因为'WHERE a,b在1,2。。。根本不优化。如果表格足够小,这样表格扫描就可以了。@RickJames。根据文档中的注释,这实际上是在5.7.3中修复的。@GordonLinoff-谢谢!我错过了那个变更日志条目。
SELECT distinct id FROM attributes 
WHERE id IN (
  SELECT id FROM attributes 
  WHERE  ( (attribute = 12944489 AND attrib_value =  907348202 ) 
) 
AND id IN (
  SELECT  id FROM attributes 
  WHERE ( 
    (attribute = 577513892 AND attrib_val = 519655334 ) 
    OR (attribute = 577513892 AND attrib_val = 1266247963 ) 
  ) 
  )
)
SELECT id
FROM attributes 
WHERE (attribute, attrib_value) IN ( (12944489, 907348202), (577513892, 519655334), (577513892, 1266247963) ) 
GROUP BY id 
HAVING SUM( (attribute, attrib_value) IN ( (12944489, 907348202) ) ) > 0 AND
       SUM( (attribute, attrib_value) IN ( (577513892, 519655334), (577513892, 1266247963) ) ) = 0;
SELECT id
    FROM a AS a1
    WHERE attr = 11 AND val IN (22, 33)
      AND NOT EXISTS (
              SELECT 1 FROM a
                  WHERE id = a1.id
                    AND attr = 44
                    AND val IN (55, 66) )

PRIMARY KEY(id)   -- Is this already there?  If so, good for inner query
INDEX(attr, val, id)  -- needed for outer query