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类型数据作为,索引来处理 ==》伪哈希。
- mysql优化整理01
- mysql(优化01)
- mysql 查询优化01
- MySQl优化-01
- 优化Mysql
- mysql优化
- mysql优化
- mysql优化
- MySQL 优化
- MySQL优化
- mysql 优化
- mysql 优化
- Mysql优化
- 优化Mysql
- 优化Mysql
- 优化MYSQL
- mysql 优化
- mysql 优化
- 求整数各位数字之和
- IntelliJ IDEA使用git命令
- jeesite项目学习(一)项目运行
- Unity 弹球打砖块游戏(简易)
- 人工智能 公开课
- MySQl优化-01
- 仿微信图片选择器的添加使用
- 知乎和Quora高分APP原型设计工具推荐
- log4J2写入mysql
- android studio gradle配置
- 指针占几个字节
- CSS实现垂直居中
- fragment事物跳转
- MySQl优化-02