Chinaunix

标题: where字段条件多,至少3个以上,如何优化 [打印本页]

作者: todayhero    时间: 2013-02-05 22:08
标题: where字段条件多,至少3个以上,如何优化
where gid not in (54725,98926) and t_category_id = 21 and t_cityid!=15 and t_cityid!=1 and t_delivery=1 and t_starttime<1359993600 AND t_endtime >= 1360070513 and t_isdelete=0 ORDER BY t_starttime desc;


就上面这个where,10W行纪录,每个字段唯一性都不强,如何处理比较好。

我目前的处理办法,找唯一最好的字段建索引,尽可能少扫描数据。


我试过复合索引效果不大,大家还有什么好的建议吗?谢谢。
作者: seesea2517    时间: 2013-02-06 10:03
这个有 not in 又有 != 看上去就应该是不那么快。
我以为 gid 不是应该是唯一的字段吗,不过即使是索引了,也是除了两个值之外的所有数据,和全表扫描没什么区别了。
这样看来,只有利用starttime 和 endtime 的复合唯一性最好了,可是感觉又不够科学。
纠结呐。
作者: todayhero    时间: 2013-02-06 10:49
回复 2# seesea2517

这个语句,基本上没什么可优化的,下面是准备拆分,如何拆分,效率更高,这点是我比较关心的。


   
作者: wlmouse    时间: 2013-02-06 11:58
总数据量和返回的数据量各是多少。返回量太大,那么什么索引也没意义,还没全表快呢。
如果结果集比较小的话,我觉得时间和排序进行索引应该有可能提高性能。

作者: todayhero    时间: 2013-02-06 12:43
回复 4# wlmouse

starttime endtime返回近50%的数据,所以索引也不是太好。


   
作者: wlmouse    时间: 2013-02-06 17:47
回复 5# todayhero


    所以我问你返回的结果集有多大呀。结果集过大,用索引还不如不用。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2