mysql order by 索引名字_mysql优化学习记录1--索引和order by

在看高性能  mysql 时,里面有些总结写得很好,所以就记录下来,方便自己查询。如果发现有写得不对的,欢迎指出。

数据表建立索引了,但如果查询方式不对,则不能正确使用索引的快速查询。

CREATE TABLE people(

last_name VARCHAR(50) NOT NULL,

first_name VARCHAR(50) NOT NULL,

dob DATE NOT NULL,

gender ENUM('m','f') NOT NULL,

KEY(last_name,first_name,dob)

)

1 . 单张表查询时,索引列的顺序应该和 order by 的顺序一样,并且所有列都应该是升序或是降序。这时查询出来的结果是使用了索引并且对索引进行了排序。

2. 多表查询时, order by 所引用的所有字段应该都是第一张表里面的字段

B-Tree索引的限制:

1 如果不是按照索引的最左列开始查找,则无法使用索引。例如上面例子中的索引在每用于查找名字为Bill的人,也无怯查找某个特定生日的人,因为这两列都不是最左数据列。类似地,也无战查找姓氏以某个字母结尾的人。当把几个列合并为一个索引时,要使用索引,则一定要使用该索引中的第一列,比如上面的people表,其实只有一个索引(last_name),要用到这个索引,则 where 条件中一定要使用到last_name

2 不能跳过索引中的列。也就是说,前面所述的索引无法用于查找姓为Smith并且在某个特定日期出生的人。如果不指定名(first_name),则MySQL只能使用索引的第一列。

3 如果查询中有某个列的范围(like  between > < 都算范围查询)查询,则其右边所有列都无法使用索引优化查找。例如有查询 WHERE lastname='Smith’AND firstname like '%J%'AND dob=’1976-12-23',这个查询只能使用索引的前两列,因为这里的like是一个范围条件(但是服务器可以把其余列用于其他目的)。如果范围查询列值的数量有限,那么可以通过使用多个等于条件来代替范围条件。查询时,把条件属于范围的,放在最后面,因为它的右边就不能使用索引了。

以上面那三个点,具体可看此 http://www.programgo.com/article/2117140041/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值