MySQL优化的14条建议

MySQL优化的14条建议
1. 避免使用 select *
你需要什么信息,就查询什么信息,查询的多了,查询的速度肯定就会慢。
2. 当你只需要查询出一条数据的时候,要使用 limit 1
比如你要查询数据中是否有男生,只要查询一条含有男生的记录就行了,后面不需要再查了,使用Limit 1 可以在找到一条数据后停止搜索。
3. 建立高性能的索引
索引不是随便加的也不是索引越多越好,更不是所有索引对查询都有效。
4. 建数据库表时,给字段设置固定合适的大小
字段不能设置的太大,设置太大就造成浪费,会使查询速度变慢。
5. 要尽量使用not null
6. EXPLAIN 你的 SELECT 查询
使用EXPLAIN,可以帮助你更了解MySQL是如何处理你的sql语句的,你可以查看到sql的执行计划,这样你就能更好的去了解你的sql语句的不足,然后优化语句。
7. 在Join表的时候,被用来Join的字段,应该是相同的类型的,且字段应该是被建过索引的。
这样,MySQL内部会启动为你优化Join的SQL语句的机制。
8. 如果你有一个字段,比如“性别”,“国家”,“民族”, “省份”,“状态”或“部门”,这些字段的取值是有限而且固定的,那么,应该使用 ENUM 而不是 VARCHAR。
因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。
9. 垂直分割
将常用和有关系的字段放在相同的表中,把一张表的数据分成几张表,这样可以降低表的复杂度和字段的数目,从而达到优化的目的
10. 优化where查询
①避免在where子句中对字段进行表达式操作
比如:select 列 from 表 where age*2=36;
建议改成 select 列 from 表 where age=36/2;
②应尽量避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描
③应尽量避免在 where 子句中使用 = 操作符
④应尽量避免在 where 子句中使用 IS NULL 或 IS NOT NULL
11. 理解select Count (*)和Select Count(1)以及Select Count(column)区别
一般情况下,Select Count (*)
和Select Count(1)
两者返回结果是一样的;
假如表没有主键(Primary key), 那么count(1)比count()快;
如果有主键的话,那主键作为count的条件时候count(主键)最快;
如果你的表只有一个字段的话那count()就是最快的;
count(*)
跟 count(1)
的结果一样,都包括对NULL的统计,而count(column)
是不包括NULL的统计。
12. 理解select distinct 和 group by 的区别
在某些情况下,使用 select distinct
可能比使用 group by
更快。因为 select distinct
会先对数据进行排序和去重,然后再返回结果。而 group by
是对数据进行分组,然后再对每个分组应用聚合函数。
13. 理解子查询和连接的优缺点
在某些情况下,使用子查询可能比使用连接更快。因为子查询会先对数据进行过滤,然后再进行连接。而连接是先对数据进行连接,然后再进行过滤。
14. 理解索引的选择性
选择性是指索引列中不同值的数量与总行数的比率。选择性越高,索引的效果越好。通常选择性在50%以上时,索引效果较好。
