saup007 发表于 2011-9-15 14:09:04

mysqldumpslow找到的sql,查询不明白?

rt
偶是oracle dba,刚管理mysql,学习中。。。
mysqldumpslow -s c -t 20 host-slow.log按执行次序

Count: 270Time=14.71s (3971s)Lock=0.00s (0s)Rows=1.0 (270), 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:48

那是慢日志工具统计出来的报表,是个泛指,总结出了句型。N代表具体值。
当然,一个值时,最好用=代替IN,另外注意where字段中的索引。

saup007 发表于 2011-9-15 14:38:56

本帖最后由 saup007 于 2011-9-15 14:42 编辑

kider 发表于 2011-9-15 14:19 static/image/common/back.gif
那是慢日志工具统计出来的报表,是个泛指,总结出了句型。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的效率平衡。
页: [1]
查看完整版本: mysqldumpslow找到的sql,查询不明白?