MySQL有某种“严格的性能模式”吗?

时间:2010-03-06 01:14:16

标签: mysql

我想设置一个MySQL实例来完全拒绝某些类型的查询。例如,任何不使用索引的JOIN都应该失败并且死亡并显示在应用程序堆栈跟踪上,而不是运行缓慢并显示在slow_query_log上,而没有简单的方法将其绑定到导致它的实际测试用例。

另外,我想禁止“*”(如“SELECT * FROM ...”),并且基本上抛出语法错误。从MySQL性能角度来看,任何有问题或危险的事情都应该导致错误。

这可能吗?除了攻击MySQL内部......有一个简单的方法吗?

3 个答案:

答案 0 :(得分:1)

如果你真的想控制用户/程序员通过SQL做什么,你必须在MySQL和你的代码之间放置一个限制访问的层,就像只允许访问某些表的ORM,以及只有某些查询。然后,您还可以检查以确保表格具有索引等。

但是,您无法确定查询是否使用索引。这是由数据库中的查询优化器层决定的,逻辑可能会非常复杂。

答案 1 :(得分:0)

不可能。

您可以做些什么来使事情更好地工作,就是创建由您优化的视图,并让用户只能访问这些视图。现在你确定相关的SELECT将使用索引。

但他们仍然可以破坏性能,只是在一些观点上做一个疯狂的JOIN并且性能消失了。

答案 2 :(得分:0)

据我所知,MySQL没有提供此功能,但任何“不可能”或类似的答案都是错误的。如果你真的想这样做,那么你可以随时download the source并自己添加功能,不幸的是,这肯定会被称为“攻击MySQL内部”。