关于检索顺序问题

qqwx_1986 2009-10-28 04:00:26
select * from table1 where c1=4 and c2=5 ;

mysql是先检索c1还是c2呢?如果c2有做索引c1没有做索引又是怎样

如果下面:
select * from table1 where c1 like '%%%wwe%%' and c2=5 ;

c2如果不是索引顺序怎样,如果c2是索引呢?

mysql对于这种会不会自己优化呢?

...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-10-28
  • 打赏
  • 举报
回复
下面的MYSQL官方文档中的详细的说明。


http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#query-speed
7. 优化

7.2. 优化SELECT语句和其它查询
7.2.1. EXPLAIN语法(获取SELECT相关信息)
7.2.2. 估计查询性能
7.2.3. SELECT查询的速度
7.2.4. MySQL怎样优化WHERE子句
7.2.5. 范围优化
7.2.6. 索引合并优化
7.2.7. MySQL如何优化IS NULL
7.2.8. MySQL如何优化DISTINCT
7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
7.2.10. MySQL如何优化嵌套Join
7.2.11. MySQL如何简化外部联合
7.2.12. MySQL如何优化ORDER BY
7.2.13. MySQL如何优化GROUP BY
7.2.14. MySQL如何优化LIMIT
7.2.15. 如何避免表扫描
7.2.16. INSERT语句的速度
7.2.17. UPDATE语句的速度
7.2.18. DELETE语句的速度
7.2.19. 其它优化技巧
ACMAIN_CHM 2009-10-28
  • 打赏
  • 举报
回复
[Quote]如果下面:
select * from table1 where c1 like '%%%wwe%%' and c2=5 ;

c2如果不是索引顺序怎样,如果c2是索引呢?[/Quote]

c2如果不是索引 : 全表扫描
如果c2是索引呢: 使用C2索引。

基本上与你的 where 子句后的顺序无关。
ACMAIN_CHM 2009-10-28
  • 打赏
  • 举报
回复
[Quote]select * from table1 where c1=4 and c2=5 ;

mysql是先检索c1还是c2呢?如果c2有做索引c1没有做索引又是怎样[/Quote]

MSYQL会根据你的索引情况来自行优化!

1. 如果c1, c2 都有索引,则MYSQL会选择 不重复值多的那一列的索引
2. 如果 c1 有索引,C2没有,或者C1没有索引,C2有,则MYSQL会自动选择有索引的。
3. 如果C1,C2没有索引,那也没什么选择了,只能全表扫描。
qqwx_1986 2009-10-28
  • 打赏
  • 举报
回复
也就是说作为索引的条件应该尽量放到首位了
平凡的思想者 2009-10-28
  • 打赏
  • 举报
回复
支持。

[Quote=引用 1 楼 vinsonshen 的回复:]
select * from table1 where c1=4 and c2=5 ;

mysql是先检索c1还是c2呢?如果c2有做索引c1没有做索引又是怎样
-----------------------------------
如果都没有索引,那先检索c1-->c2
如果c2有做索引c1没有做索引,一般情况下,会先进行索引比较,但这个也不是绝对,要看优化器根据你的表的记录分布等一些信息来进行优化选择;

如果下面:
select * from table1 where c1 like '%%%wwe%%' and c2=5 ;

c2如果不是索引顺序怎样,如果c2是索引呢?

mysql对于这种会不会自己优化呢?
--------------------------
这样的写法你的C1就算有索引也用不上的,基本上跟上面的类似


[/Quote]
vinsonshen 2009-10-28
  • 打赏
  • 举报
回复
select * from table1 where c1=4 and c2=5 ;

mysql是先检索c1还是c2呢?如果c2有做索引c1没有做索引又是怎样
-----------------------------------
如果都没有索引,那先检索c1-->c2
如果c2有做索引c1没有做索引,一般情况下,会先进行索引比较,但这个也不是绝对,要看优化器根据你的表的记录分布等一些信息来进行优化选择;

如果下面:
select * from table1 where c1 like '%%%wwe%%' and c2=5 ;

c2如果不是索引顺序怎样,如果c2是索引呢?

mysql对于这种会不会自己优化呢?
--------------------------
这样的写法你的C1就算有索引也用不上的,基本上跟上面的类似

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧