Python 从入门到精通:写给 Go / PHP 开发者 本文假设你已经熟练掌握 Go 和/或 PHP,重点不是从零讲解"什么是变量""什么是函数",而是 用你已有的知识做类比 ,把精力集中在 Python 与 Go/PHP 真正不同的地方——尤其是类型系统、并发模型、包生态和"Pythonic"的编程习惯。 目录 核心定位差异:三门语言分别在解决什么问题 环境搭建与工具链 基础语法速成 类型系统:动态但可以强类型提示 核心数据结构 函数:从简单到高级 面向对象编程的 "Python 方式" 错误处理机制 迭代器、生成器与惰性求值 装饰器与上下文管理器 并发与并行模型(重点对比 Goroutine) 包管理与生态系统 代码风格与工程规范 测试 常用框架速览 性能优化与部署注意事项 进阶学习路线图 1. 核心定位差异:三门语言分别在解决什么问题 维度 Go PHP Python 设计哲学 简单、显式、编译期安全 Web 请求-响应模型,"能跑就行" 可读性优先,"应该只有一种明显的做法" 类型系统 静态强类型,编译期检查 动态弱类型(PHP 8 起类型提示增强) 动态强类型,可选静态类型提示(type hints) 执行方式 编译为原生二进制 解释执行(通常配合 PHP-FPM) 解释执行(CPython 字节码 + 虚拟机) 并发模型 Goroutine + Channel,语言原生 天然无状态、多进程模型,协程需额外扩展 GIL 限制下的多线程 + asyncio 协程 典型场景 后端服务、基础设施、CLI 工具 Web 应用(尤其传统 LAMP 架构) 数据科学、AI/ML、脚本自动化、Web 后端 哲学关键词 gofmt ,一切从简 实用主义,历史包袱重 import this (Python 之禅),"电池自带" 给你的心智模型 :如果说 Go 是"给你一套工具,逼你按规矩来",PHP 是"给你自由,出了问题算你倒霉",那 Pyt...
范围说明:本文档只收录 不新增索引、不改表结构、仅靠改写SQL本身 就能拿到显著性能收益的案例。每个案例包含:问题场景、根因分析、改写方案、生效的前提条件、以及如何用 EXPLAIN 验证效果。默认以 MySQL 8.0 / InnoDB 为背景,个别案例会注明与 PostgreSQL 的差异。 案例一:深分页 —— 延迟关联(Deferred Join) 场景 订单表按状态筛选后翻到很靠后的页码,是后台管理系统里最常见的慢查询之一。 CREATE TABLE orders ( id BIGINT PRIMARY KEY , customer_id BIGINT NOT NULL , status VARCHAR ( 20 ) NOT NULL , create_time DATETIME NOT NULL , buyer_name VARCHAR ( 50 ), address VARCHAR ( 200 ), remark VARCHAR ( 500 ) -- 其余字段省略,实际共30+列 ); CREATE INDEX idx_status_time ON orders( status , create_time); SELECT * FROM orders WHERE status = 'shipped' ORDER BY create_time LIMIT 1000000 , 20 ; 根因 idx_status_time 是二级索引,叶子节点只存 (status, create_time, id) ,不含其余字段。执行过程是: 1. 在二级索引上定位 status='shipped' 的记录,按 create_time 排序; 2. 每扫到一行,都要拿 id 回聚簇索引取完整行(回表); 3. 前 1,000,000 行取出来后 直接丢弃 ,只保留最后 20 行。 问题的本质不是"排序慢",而是 做了 1,000,020 次没必要的回表 I/O 。 改写 SELECT o.* FROM ...