Skip to content

Instantly share code, notes, and snippets.

@DaveIW2034
Created March 18, 2019 02:13
Show Gist options
  • Save DaveIW2034/f37b2c1cd504d0d672838a2acb7e6d41 to your computer and use it in GitHub Desktop.
Save DaveIW2034/f37b2c1cd504d0d672838a2acb7e6d41 to your computer and use it in GitHub Desktop.
mysql_optimize.py
"""
1 查询缓存, Mysql函数会使mysql默认不开启查询缓存.
2 explain, explain你的select查询.
3 一行数据时, 使用limit 1.
4 为搜索字段建立索引.
5 join表的时候使用相当类型的例, 并将其索引.
两个表中的join字段是被建立过索引的, 用来被join的字段应该是相同类型的. string类型需要相同的字符集才行.
6 不要使用ORDER BY RAND() MYSQL会不得不去执行Rand()(很耗cpu时间), 而且这是为了每一行记录去执行, 然后再对其排序.
就算你用了limit 1 也无济于事(因为要排序)
7 避免使用select * (查询变慢, 网络传输的话, 增加网络负担), 应该养成用什么取什么就好的习惯
8 永远为每张表设置一个ID
9 使用Enum, 而不是varchar, Enum 类型时非常快和紧凑的, 在实际上, 其保存的事tinyint, 担起外表显示为字符串.
procedure analyse()
10 从procedure analyse() 取得建议.
只用从表中有实际的数据, 这些建议才会变得有用, 大的决定需要有数据作为基础.
11 尽可能的使用not null.
12 Prepared statements.
13 无缓冲的查询.
14 把ip地址存成Unsigned Int.
INET_ATON(), 字符串IP转换成一个整形.
INET_NTOA(), 整形妆换成一个字符串IP.
15 固定长度的表会更快. 但会浪费空间, 定长字段, 都需要分配固定空间. 垂直分割技术(一张表分割成多张表, 定长字段和不定长字段分离.),
16 垂直分割.
把数据库中的表按照列变成几张表的方法, 这样可以降低表的复杂度和字段的数目, 从而达到优化的目的.
小一点的表会有好的性能.
被分出去的字段所形成的表, 你不会经常的join他们, 不然, 会导致性能下降.
17 拆分大的delete或insert语句, 使用limit条件.
18 越小的列会越快, 保证足够的扩展空间.
19 选择正确的存储引擎.(InnoDB, MyISAM)
20 使用一个对象关系映射器
一个ORM可以做的所有事情, 也能被手动的编写出来, 但这需要一个高级专家.
21 小心“永久链接”
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment