一个优化:覆盖索引:如果要查询的字段全在索引上,那么不需要回表
以items表中的idx_items_price_created_at索引使用举例:
# sql1:由于需要所有的字段,该查询在根据idx_items_price_created_at找到id后,还需要根据id再找items表中该条记录的其他字段的值select * from items where price = "20" and created_at = '2020-01-04';?# sql2: 由于需要的字段在索引上都有,该查询只需要在idx_items_price_created_at索引表找到记录直接返回即可select price, created_at, idwhere price = "20" and created_at = '2020-01-04';小结通过本章学习,我们了解到索引其实就是一个有序排列的表,我们通过有序排列的优势来加快查询 。也正是由于索引是有序排列的,如果想有效使用索引,我们就需要要遵循最左匹配原则 。我们还了解到覆盖索引,如果查询的字段全在索引上,可以减少一次回表查询,利用该特性在大批量查询时可以大幅度优化性能 。
本章所讲的内容全是以数据全在内存中为前提的,但是真实场景中数据都是在硬盘中保存,如果一个表中的数据可能有好几G,我们不可能把所有的数据都加载到内存然后进行二分搜索,所以下次我会讲一讲索引和硬盘的关系 。
推荐阅读
- 测试人员不知道密码,该怎么使用Linux中的mysql数据库?
- 手把手带你搭建一个自己的云服务器并部署Web程序
- 测试人员如何在linux服务器中查询mysql日志?
- MySQL内存管理,内存分配器和操作系统
- 基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步
- 面试官:你说对 MySQL 事务很熟?那我问你 10 个问题
- MySQL到底能有多少个字段?
- MySQL数据库备份之主从同步配置
- 虚拟主机能用mysql么
- python3快速爬取房源信息,并存入mysql数据库,超详细
