MySQl优化-01

来源:互联网 发布:淘宝工作室怎么运营 编辑:程序博客网 时间:2024/06/05 09:59

1、建表原则:

      1):定长字段要和变长字段相分离:比如一个表中的所有字段类型都是固定的,那么在查询的时候,只需要计算中间行的长度,就可以方便的找到对应记录。

      2):常用信息和非常用信息分离:比如 用户表中的 user_id、user_name、user_age 比较常见,但是user_info 必须是要点击用户链接以后才能看到的。那么就可以将这些数据进行分表处理 。

      3):添加冗余字段:比如 分类表中分为 1、2两类, 文章表中有多条1、2两类的数据,而且需求是要求出每种分类下文章的个数,那么就可以在分类表中添加一个冗余字段art_num 将对应分类下的 art_num 做+1 操作。

2、列类型选择:

      1):索引选择的顺序:int datetime enum char varchar blob text  比如:tinyint 就比char 作为索引的效率高、char类型会涉及到字符集和校对集的问题  varchar在多表查询的时候会更加占用内存。

      2):NULL 对索引不友好

      3):字段类型够用就行

3、索引优化策略:

      btree索引:在Myisam中会设计到一个比较耗费时间的操作:回行 。InnoDB 不会涉及到。 

      hash索引:可能一起冲突、对范围查询不适用,并且无法利用左前缀原理。

      btree索引的误区:在where 后字段不会利用索引,常用的联合索引,但是联合索引需要有顺序和个数的条件约束。

      举例:index(a,b,c)之后可以用到的索引是:

      a=3 and b=4 and c=5 ?

      a=3 and c=5 ?

      a=3 and b like "hello%" and c=10 ?

      a=1 and b=3 and c>10

      以上语句分别用到索引是。。。。。

4、索引的左前缀原则:

      btree 索引是具有左前缀索引的。

      索引对查询效率、对排序效率、对分组效率都有提高,要利用好索引。

       explain select * from test \G 分析sql 语句 

5、聚簇索引和非聚簇索引:

       1):Myisam:为非聚簇索引 指向行在索引中的位置  索引和数据是完全分离的 。这样如果没有用到索引覆盖的话会产生回行操作,耗费时间。

       2):InnoDB:为聚簇索引  分为主键索引和次级索引  次级索引指向对主键的引用。当数据没有规律时,可能会引起频繁的叶分裂,会因为数据在磁盘上会跨n个块,产生不友好的主键索引。

       Extra:using index 用到索引覆盖。

6、索引覆盖:

       对于Myisam引擎来说,比如id 为索引的时候,还要继续频繁的查询name 那么就可以 将id 和 name 一起作为联合索引来处理,这就是联合索引。避免了回行操作。 

7、理想的索引: 查询频繁 、区分程度、长度、尽量覆盖常用字段信息。

8、处理索引的左前缀原则:

      比如:http://www.google.com 作为索引的时候,在取前几个字符作为索引的时候,可能效果不是很好,处理方式:

      1) : 将url字符串逆序

      2):利用crc32函数处理url以后,将处理后产生的int类型数据作为,索引来处理  ==》伪哈希。

原创粉丝点击