
理解
MySQL—— 索引与优化
索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。
考虑如下情况,假设数据库中一个表有 条记录, 的页面大小为 ,
并存储 条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,
如果所有数据页都不在内存,需要读取 个页面,如果这 个页面在磁
盘上随机分布,需要进行 次 ,假设磁盘每次 时间为 忽略数据
传输时间,则总共需要 但实际上要好很多很多。如果对之建立 索
引,则只需要进行 次页面读取,最坏情况下耗时 。这就
是索引带来的效果,很多时候,当你的应用程序进行 查询速度很慢时,应该
想想是否可以建索引。进入正题:
第二章、索引与优化
、选择索引的数据类型
支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。
通常来说,可以遵循以下一些指导原则:
越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和 缓存中都
需要更少的空间,处理起来更快。
!简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较
更复杂。在 中,应该用内置的日期和时间数据类型,而不是用字符串来存
储时间;以及用整型数据类型存储 地址。
尽量避免 " :应该指定列为 "#" ,除非你想存储 " 。在
中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比
较运算更加复杂。你应该用 、一个特殊的值或者一个空串代替空值。
$、选择标识符
选择合适的标识符是非常重要的。选择时不仅应该考虑存储类型,而且应该考虑
是怎样进行运算和比较的。一旦选定数据类型,应该保证所有相关的表都
使用相同的数据类型。
####整型:通常是作为标识符的最好选择,因为可以更快的处理,而且可以设置
为 % &"'(("。
!####字符串:尽量避免使用字符串作为标识符,它们消耗更好的空间,处理起来
也较慢。而且,通常来说,字符串都是随机的,所以它们在索引中的位置也是随机
的,这会导致页面分裂、随机访问磁盘,聚簇索引分裂(对于使用聚簇索引的存储
引擎)。
!、索引入门
对于任何 ,索引都是进行优化的最主要的因素。对于少量的数据,没有合
适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。
如果对多列进行索引组合索引,列的顺序非常重要, 仅能对索引最左边
的前缀进行有效的查找。例如:
评论