带有投影和产品的查询的良好索引(postgreSQL)

时间:2018-01-24 11:09:06

标签: sql postgresql indexing

这两个案例的指数是多少?

A)

SELECT p.content, u.name
FROM posts p, admins a, users u
WHERE
p.tag = a.tag and 
a.id = u.id and 
p.content = 'Hello World';

B)

SELECT u.name, p.date
FROM users u, posts p
WHERE
u.userid = p.userid and 
p.content = 'Hello World';

我尝试通过逐个创建不同的索引来了解性能如何受到影响。对于每个新索引,查询运行得更快,但是在删除它们之后,获得的性能仍然存在。所以最后,我无法比较。

1 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

所以,写下这样的查询:

SELECT p.content, u.name
FROM posts p JOIN
     admins a
     ON p.tag = a.tag JOIN
     users u
     ON a.id = u.id
WHERE p.content = 'Hello World';

SELECT u.name, p.date
FROM posts p JOIN
     users u
     ON u.userid = p.userid
WHERE p.content = 'Hello World';

最好的索引在

  • posts(content, tag)
  • admins(tag, id)
  • users(id, name)
  • posts(content, userid, date)
  • users(userid, name)

不幸的是,每个表都没有匹配这些查询的索引。他们使用不同的列。