SELECT t.* FROM cdb_threads t WHERE (t.fid='2' Or t.otherfid='2') AND t.displayorder>=0 ORDER BY t.displayorder DESC, t.lastpost DESC LIMIT 0, 20
这条SQL语句应该如何优化建立索引呢,
ALTER TABLE `cdb_threads` ADD INDEX `otherfid` ( `fid` , `otherfid` , `displayorder` , `lastpost` )
我建立上面的索引后使用EXPLAIN分析了一下
EXPLAIN SELECT t.* FROM cdb_threads t WHERE (t.fid='2' Or t.otherfid='2') AND t.displayorder>=0 ORDER BY t.displayorder DESC, t.lastpost DESC LIMIT 0, 20
发现没有使用索引哦,是不是有OR在查询条件里面不能使用索引?
这条SQL语句应该如何优化建立索引呢,
ALTER TABLE `cdb_threads` ADD INDEX `otherfid` ( `fid` , `otherfid` , `displayorder` , `lastpost` )
我建立上面的索引后使用EXPLAIN分析了一下
EXPLAIN SELECT t.* FROM cdb_threads t WHERE (t.fid='2' Or t.otherfid='2') AND t.displayorder>=0 ORDER BY t.displayorder DESC, t.lastpost DESC LIMIT 0, 20
发现没有使用索引哦,是不是有OR在查询条件里面不能使用索引?
解决方案 »
- 数据库查询变慢
- 求sql语句
- 关于SHOW PROFILE的问题
- mysql grant 授权不起作用
- MySQL the error:No data - zero rows fetched, selected, or processed.
- Postgresql中触发器中是否可用Alter来建立列???
- Data too long for column 'name' at row 1的问题
- 找一个管理MYSQL的工具,
- 什么是ISAM和MYISAM表
- win2k下的mysql怎么使用事务??
- sql语句中password句的困惑,求高手解答
- 没分了.... 但求一个问题-----Mysql数据库文件还原的问题
如果同时有OR和 AND的话。优化器只考虑AND部分的优化。
所以你要对displayorder建立索引。