zoukankan      html  css  js  c++  java
  • Mysql的order by 执行原理

    说明:

    1. mysql使不使用索引与所查列无关,只与索引本身,where条件,order by 字段,group by 字段有关。

    2. 索引的作用一个是查找,一个是排序。

    order by语句使用索引最左前列,使用where子句与order by子句条件列组合满足索引最左前列。

    CREATE TABLE user (
      id int(11) NOT NULL,
      city varchar(16) NOT NULL,
      name varchar(16) NOT NULL,
      age int(11) NOT NULL,
      PRIMARY KEY (id),
      KEY city (city)
    ) ENGINE=InnoDB;

     

     

    如果能够保证从city这个索引上取出来的行,天然就是按照 name 递增排序的话,是不是就可以不用再排序了呢?
    因此想到了联合索引,创建(city,name)联合索引,sql 语句如下:

    alter table user add index city_user(city, name);

    select city,name,age from user where city='苏州' order by name limit 1000;

    还能不能优化呢,朋友们还记得覆盖索引吗?覆盖索引的好处就是能够避免再次回表查询。
    我们创建(city,name,age)联合索引,这样在执行上面的查询语句就能使用覆盖索引了,避免了回表查询了,sql 语句如下:
    alter table user add index city_user_age(city, name, age);

    当然,覆盖索引能够提升效率,但是维护索引也是需要代价的,因此还需要权衡使用。

  • 相关阅读:
    数据库Mysql给用户赋予操作表的权限
    C# log4net日志分等级打日志
    C# 将字符串转为函数名
    C# winform无法拖动控件
    C# 程序获取管理员方法
    C# 生成程序目录避免生成多余的XML和pdb
    C# 快速获取一个月的天数或最后一天
    正则
    C# 根据服务名打开所在文件夹
    330 div+css Experience
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/12944821.html
Copyright © 2011-2022 走看看