将where子句添加到MySQL会话中

时间:2011-09-13 14:21:46

标签: mysql sql database

是否可以添加类似where子句的内容作为全局' mysql会话的参数。

例如,公司有多个用户,您想要查询该公司的用户,通常您会使用如下语句:

SELECT * FROM users WHERE users.companyId = 2;

问题是添加WHERE子句意味着对代码产生巨大影响。虽然,我们定义了关系,因此我的形象(尽管我不认为它存在),你可以创建一个与"全球"约束该会话中的所有查询都应符合。

3 个答案:

答案 0 :(得分:1)

您可以创建视图

CREATE VIEW view2 AS SELECT * FROM table1 WHERE companyid = 2;

如果你的诅咒缓慢,你可以做一些事情:

  • 在此案例中为where字段添加索引。
  • 如果您需要更快的速度,可以通过companyid对表进行分区。
  • 将表格设为memory table,并为hash=字段使用IN索引。
  • 使用InnoDB而不是MyISAM。 InnoDB具有更快的索引。
  • 请勿使用select *,明确选择 所需的字段。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/create-view.html
http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

答案 1 :(得分:1)

答案是否定的。

如前所述,你应该在该coloumn上加上一个索引。你可以创建一个视图。

您也可以使用临时表

来自mysql docs:

  

创建表时可以使用TEMPORARY关键字。临时的   table仅对当前连接可见,并被删除   连接关闭时自动这意味着两个   不同的连接可以使用相同的临时表名   相互冲突或与现有的非TEMPORARY表冲突   同名。 (现有表隐藏到临时表之前   被丢弃了。)

作为最后的想法,我可以说,如果你一遍又一遍地执行相同的查询,你应该重新考虑你的模型图,也许做一些非规范化。

答案 2 :(得分:0)

当你从没有companyId的表中执行select时会发生什么:)你可以创建视图,然后从中选择