分区:
在数据量超大的时候,B-tree 索引就无法起作用了。除非索引是覆盖查询,否则数据库服务器需要根据索引扫描的结果回表,查询所有符合条件的记录,如果数据量巨大,这将产生大量随机I/O 。另外索引维护的代价也非常高。
理解分区时还可以将其当作索引的最初形态,以代价非常小的方式定位到需要的数据在哪一片“区域”。在这片区域中,你可以做顺序扫描,可以建索引,还可以将数据缓存到内存
为了保证大量数据的可扩展性,一般有两个策略:
全量扫描数据,不要任何索引
索引数据,并分离热点
分区查询:一个很重要的原则是:即使在创建分区时可以使用表达式,但在查询时却只能根据列来过滤分区。
MYSQL 全文索引 和普通查询不同,这类查询自动按照相似度进行排序。在使用全文索引进行排序的时候,MYSQL无法再使用索引排序。
MySQL 判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了如下因素,即查询本身、当前要查询的数据库、客户端协议的版本等
当要查询的表被LOCK TABLES锁住时,查询仍然可以通过查询缓存返回数据。