MariaDB社区

标题: mysqldumpslow找到的sql,查询不明白? [打印本页]

作者: saup007    时间: 2011-9-15 14:09
标题: mysqldumpslow找到的sql,查询不明白?
rt
偶是oracle dba,刚管理mysql,学习中。。。
mysqldumpslow -s c -t 20 host-slow.log  按执行次序

Count: 270  Time=14.71s (3971s)  Lock=0.00s (0s)  Rows=1.0 (270), fan[fan]@3hosts
  SELECT count(*) AS count_all FROM `tuan_coupons` WHERE (operator_id in (N) and consume = N)


我在数据库里
SELECT * FROM `tuan_coupons` WHERE (operator_id IN ('N') AND consume = 'N')
可以查询,需要在N 加上单引号

结果operator_id  的值为0

不明白 WHERE (operator_id IN ('N') AND consume = 'N') 是神马意思

SELECT * FROM tuan_coupons t limit 10 查询operator_id为NULL或都有数值

数据类型
`operator_id` int(11) DEFAULT NULL
`consume` smallint(6) DEFAULT '0'

如果做优化,因为只有一个值,可以把 in 换成 = ?


作者: kider    时间: 2011-9-15 14:19
那是慢日志工具统计出来的报表,是个泛指,总结出了句型。N代表具体值。
当然,一个值时,最好用=代替IN,另外注意where字段中的索引。
作者: saup007    时间: 2011-9-15 14:38
本帖最后由 saup007 于 2011-9-15 14:42 编辑
kider 发表于 2011-9-15 14:19
那是慢日志工具统计出来的报表,是个泛指,总结出了句型。N代表具体值。
当然,一个值时,最好用=代替IN, ...


谢谢。

但是我在mysql SQLyog Enterprise工具查询
单独用sql查询
SELECT t.operator_id,t.consume FROM tuan_coupons t WHERE (t.operator_id IN ('N') AND t.consume = 'N')
可能类型为int,'N'不代表字符串,只是泛指。。。

显示operator_id值为0
显示consume值也为0


还有,t.id in (a,b) ,改写为t.id=a or t.id=b 吧,多少in 结果与or的效率平衡。




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2