作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这里有一个非常简单的表结构。只是与简单 user_id 相关的单词列表。
Word Table:
word - varchar(50)
user_id - integer
我需要找到一个用户使用但其他用户未使用的词。目前我正在这样做,它在 Postgresql (9.0.3) 上以 200k 字(~.3-.5 秒)运行良好,并且在具有相同数据(5 分钟以上)的 MySQL (5.1.54) 上完全失败仍在运行)。所有使用的列都已编入索引。
SELECT
word, count(word) as count
FROM
words
WHERE
word not in (select word from words where user_id <> 99 group by word)
and user_id = 99
GROUP BY word
ORDER BY count desc LIMIT 20
1) 有人知道更好的方法吗?
2) 有人知道为什么它在 MySql 上完全失败吗?
编辑:这修复了 MySQL 上的问题,从 5 分钟以上到 10-20 毫秒 - 感谢 Borealid
SELECT
word, count(word) as count
FROM
words
WHERE
word not in (select distinct word from words where user_id <> 99)
and user_id = 99
GROUP BY word
ORDER BY count desc LIMIT 20
谢谢。
最佳答案
尝试 NOT EXISTS():
SELECT
w1.word,
COUNT(w1.word) as count
FROM
words w1
WHERE
NOT EXISTS (
SELECT 1
FROM
words w2
WHERE
w2.user_id <> 99
AND
w1.word = w2.word
)
AND
w1.user_id = 99
GROUP BY
w1.word
ORDER BY
count DESC
LIMIT 20;
确保您在 user_id 和单词(或组合)上有一个索引,使用解释来查看查询计划以及最适合您的内容。
======编辑:也可以尝试使用 IS NULL 的 LEFT JOIN 解决方案:
SELECT
w1.word,
COUNT(w1.word) AS count
FROM
words w1
LEFT JOIN words w2 ON (w1.word = w2.word AND w1.user_id <> w2.user_id)
WHERE
w1.user_id = 99
AND
w2.word IS NULL
GROUP BY
w1.word
ORDER BY
count DESC
LIMIT 20;
在两列上尝试索引:
CREATE INDEX idx_word_user ON words ( word, user_id);
关于sql - 用户独有的词 - 不在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079145/
是否可以根据 IP 地址每 24 小时向我网站的访问者显示一段文字,例如,如果用户访问我的网站,将显示一段文字,但是如果用户再次访问该网站在 24 小时内,这段文字将被隐藏,直到 24 小时过去? 最
假设我有一系列文章: https://example.firebaseio.com/articles/$key 我想给 articles 添加一个 viewCounter 和 currentUsers
我是一名优秀的程序员,十分优秀!