查询大数据表的优化:
操作: 查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段;
原理: 减少回表操作;
-- 优化前SQL,要17S SELECT 各种字段 FROM`table_name` WHERE 各种条件 LIMIT0,10;
-- 优化后SQL,要300ms SELECT 各种字段 FROM`table_name` main_tale RIGHTJOIN ( SELECT 子查询只查主键 FROM`table_name` WHERE 各种条件 LIMIT0,10; ) temp_table ON temp_table.主键 = main_table.主键
原因总结:
查询到索引叶子节点数据。根据叶子节点上的主键值去聚簇索引上查询需要的全部字段值。
参考资料:
1.https://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/
2.https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-buffer-pool-tables.html