我是否应该打扰清理此查询,或者MariaDB为我处理这个问题?

时间:2017-11-07 16:25:21

标签: mysql mariadb

我使用php生成一些MySQL查询。在某些情况下,我的代码会为某些查询生成重复的查询代码,以提高安全性。例如,假设我有一个表UploadedImages,其中包含用户上传的图像。它通过引用连接到User表。当普通用户想要查询该表时,如果他没有管理员权限,我强行向查询添加WHERE条件,该查询只检索属于他的图像。

由于这种强有力的包含,有时候,我生成的查询会在条件:

中产生重复
SELECT * FROM UploadedImages WHERE 
  accounts_AccountId = '143' AND 
  DateUploaded > '2017-10-11 21:42:32' AND 
  accounts_AccountId = '143'

我是否应该在运行之前清理此查询,或者MariaDB为我清理它? (也就是说,这个查询会运行得更慢,或者如果我不通过删除相同的重复条件而事先清理它会导致错误结果吗?)

2 个答案:

答案 0 :(得分:1)

如果您的问题是“我应该打扰清理它吗?”,是的,您应该清理生成此代码的代码,因为它可以多次包含相同的子句这一事实表明数据库层不是抽象为特别现代的水平。应该能够重写数据库层以使用不同的数据库提供程序,而无需更改依赖于它的代码。看起来情况并非如此。

如果您的问题是“添加相同限制两次会减慢查询速度吗?”那么答案是否定的,不是很重要。

答案 1 :(得分:0)

您可以自己回答问题:对两个查询运行EXPLAIN SELECT ...。如果输出相同,则清除dup。