MySQL使用单值选择
在MySQL中,这样做很糟糕:MySQL使用单值选择,mysql,sql,Mysql,Sql,在MySQL中,这样做很糟糕: SELECT ... WHERE foo IN ('bar') 而不是这个 SELECT ... WHERE foo = 'bar' …鉴于此动态生成的WHERE子句也可能 SELECT ... WHERE foo IN ('bar', 'baz', 'buz') 我不确定我是否会为此担心 但是,因为它是动态生成的,所以在构建where子句之前,您始终可以进行测试以查看有多少值。我的理解是,在执行之前,它将转换为相同的值。无论采用哪种方式,我都会将其放在“关
SELECT ... WHERE foo IN ('bar')
而不是这个
SELECT ... WHERE foo = 'bar'
…鉴于此动态生成的WHERE子句也可能
SELECT ... WHERE foo IN ('bar', 'baz', 'buz')
我不确定我是否会为此担心
但是,因为它是动态生成的,所以在构建where子句之前,您始终可以进行测试以查看有多少值。我的理解是,在执行之前,它将转换为相同的值。无论采用哪种方式,我都会将其放在“关注度非常低”的标题下。对于SQL查询优化和最佳实践,最好使用:
WHERE foo = 'bar' OR foo = 'baz'
比:
关于我也不确定,但如果没有显著的性能影响,我宁愿保持生成代码干净+concise@Rob阿加尔:这属于预优化的概念。如果在评测应用程序时,您注意到性能受到影响,请更改它。否则,你就去做你觉得更舒服的事情。可能重复:@mcabral:我同意@卡西诺的答案最适用于这一点situation@mcabral-出于好奇,你是怎么发现那个傻瓜的,因为“in”是一个停止词?你这个老把戏!谷歌搜索“site:stackoverflow.com关键字中的mysql”@mcabral哈哈!是的,很明显,一旦你看到它,它实际上应该是
foo='bar'或foo='baz'
,但我认为这根本不会改变性能。你有这方面的来源吗?我不是有意粗鲁,但我一直在读它们是完全一样的。对于小的IN条款,没有问题。但是,如果您有非常大的IN子句,特别是那些随每次执行而变化的子句,则多页分配器和过程缓存会出现重大问题。
WHERE foo IN ('bar', 'baz')