数据库的操作向来是应用的瓶颈,关注数据库的优化不仅是DBA的事情,程序员也应关注。
1. 使用查询缓存
使用查询缓存可减少查询次数,但注意查询时不能直接在sql中使用MySql的函数如now(),curdate()。
// 查询缓存不开启 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 开启查询缓存 $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
2. 选用适用的数据库引擎
如果数据量少且查询多用MyISAM,如果数据量大且更新多、需要事务支持和故障恢复,用InnoDB。
3. 使用explain分析sql慢查询语句
在复杂的查询语句前+explain,来查看sql查询语句如何进一步优化。
EXPLAIN SELECT * FROM city
分析结果的含义:
1)table:表名;
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查询可以利用的索引名;
4)key:实际使用的索引;
5)key_len:索引中被使用部分的长度(字节);
6)ref:显示列名字或者"const"(不明白什么意思);
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8)extra:MySQL的建议;
4. 当只要一行数据时使用LIMIT 1
当知道要查询的数据只有一行时,比如根据ID查询产品,根据名字查询人
// 没有效率的: $r = mysql_query("SELECT * FROM user WHERE country = 'China'"); if (mysql_num_rows($r) > 0) { // ... } // 有效率的: $r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); if (mysql_num_rows($r) > 0) { // ... }
5. 为经常查询的字段建立索引
比如在产品表中经常查询product_name字段,就给这个字段建立一个索引
select (*) from product where product_name like 'a_%'
6. 在join表的时候使用相同类型的列,并且在列上建索引
在join查询的语句中,两个join的列的数据类型应该一致,并且建索引以提高查询速度
// 在state中查找company $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id"); // 两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集。
7. 避免select *
从数据库中读出越多的数据,查询越慢,并且如果应用服务器和数据库服务器是两台服务器的话,增加网络数据传输的负载。
所以,应该需要什么就查询什么,按需查询。
// 不推荐 $r = mysql_query("SELECT * FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome {$d['username']}"; // 推荐 $r = mysql_query("SELECT username FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome {$d['username']}";
8. 永远为每张表设置一个ID
为每张表设置一个ID当主键,而且最好类型是INT型。
推荐使用unsigned,设置为自动增加aotu_increment.
如果使用varchar类型来当主键会造成性能下降。
9. 使用enum而不是varchar
enum是非常快和紧凑的,实际上保存的是tinyint,外表上显示为字符串。
像“性别”、“状态”等,这些字段的取值是有限且固定的,应用使用enum。
10. 从 procedure analyse()取得建议
11. 尽可能的使用not null
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
12. 使用preparedStatement 预编译语句
13. 字段为固定长度的表会更快
a. 使用char替代varchar,固定长度的数据处理比变长的快些;
给每个字段设置固定的长度,将被认为是static和fixed-length的,这样能提高查询性能,因为MySql能搜寻得快一些。定长的表更容易被缓存,缺点是浪费一些的空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。
14. 垂直切割表
是把数据库的表一张变成数张,可以降低表的复杂度和字段的数目,从而达到优化的目的。
15. varchar类型上不要建索引
varchar列上建索引影响查询性能,当需要大量查询varchar列时,可以建全文索引(full text)在varchar列上,但表的类型需要是MyIsAM。
16. 使用procedure analyse()优化表的数据类型
SELECT * FROM city PROCEDURE ANALYSE(16,256)
17、使用tinyint(1)代表boolean值
因为boolean值在数据库中会自动转换为tinyint(1)类型。
相关推荐
以下是一份详细的MySQL优化笔记,涵盖了多个方面: 一、查询优化 1. 使用索引:为经常用于搜索的列创建索引可以显著加快查询速度。B树和哈希索引是最常见的类型,适用于不同的查询场景。 2. 避免全表扫描:尽量使用...
mysql慢可能是配置不对,阅读一下这个可能对你有帮助 ...对于Discuz!... 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。
以下将详细介绍MySQL优化的各个方面,并结合提供的文件名进行推测,尽管没有实际内容,但我们可以根据文件名来讨论可能涉及的主题。 1. **索引优化**:`mysql_rel.sql`可能包含SQL脚本,其中创建表结构和数据的关系...
在进行MySQL优化时,我们需要对数据库进行深入分析,以便找到性能瓶颈并进行相应的调整。优化可以分为三个主要部分:优化概述、查询与索引优化分析以及配置优化。 首先,在优化概述部分,了解MySQL数据库常见瓶颈是...
在"MySQL优化.rar"这个压缩包中,我们很显然会接触到关于MySQL数据库优化的详细内容,这包括但不限于查询优化、索引优化、存储引擎选择、架构设计等多个方面。 首先,查询优化是MySQL性能提升的关键步骤。通过对SQL...
为什么要开发这个MySQL 优化工具(Why) “一键优化”功能,可以优化本地/远程需要优化的机器,将繁琐的优化工作“傻瓜”式操作 根据您的业务需求Step By Step优化的MySQL服务器参数,起到指引的作用,简化用户...
以下是一些深入浅出的MySQL优化策略: 1. 选择合适的字段属性: 在设计数据库表时,应尽可能减小字段宽度,以减少存储空间和查询时间。例如,邮政编码字段只需设定为CHAR(6)即可,无需使用VARCHAR或更大的类型。...
MySQL优化是数据库管理中至关重要的环节,它涉及到提升查询性能、降低资源消耗,从而提高整个系统的响应速度和服务质量。MySQL自带的慢查询日志(slow query log)是进行优化的重要工具之一,它记录了执行时间超过预设...
MySQL 优化方法主要涵盖...总之,MySQL优化涉及多个层面,包括合理选择存储引擎、优化字段类型、建立合适索引以及编写高效的SQL语句。每个环节都对数据库性能有着直接影响,需要根据实际业务需求进行综合考虑和调整。
### MySQL优化知识点详解 #### 一、MySQL简介 MySQL是一款由MySQL AB公司开发的开源数据库管理系统,后来该公司被Sun Microsystems收购。MySQL因其简单、高效、可靠的特点,在IT行业中迅速崭露头角,成为最受欢迎...
21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用SHOW PROCESSLIST 26. 如何知晓MYSQL解决一条查询 27. MYSQL非常不错 28. MYSQL应避免...
我的mysql优化日记 我的mysql优化日记 我的mysql优化日记 我的mysql优化日记
MySQL优化是数据库管理中至关重要的一个环节,它旨在提高数据查询效率、降低系统资源消耗,以确保服务的稳定性和响应速度。"MySQL优化大揭秘"这个压缩包中的"SQL.pdf"很可能包含了关于如何优化MySQL数据库的详细教程...
mysql优化从以下几个方面介绍 mysql的架构 索引优化分析 查询截取分析 mysql锁机制 主从复制
MySQL优化是数据库管理中的关键环节,它涉及到性能提升、资源利用率优化以及系统稳定性的保障。这份"Mysql优化 PPT"可能会涵盖多个方面的内容,包括但不限于查询优化、索引策略、存储引擎选择、数据库架构设计、资源...
教程名称:大型门户网站核心技术-Mysql优化 课程目录:【】Mysql优化 资料【】Mysql优化01关键技术【】Mysql优化02表的设计【】Mysql优化03慢查询(一)【】Mysql优化04慢查询(二)【】Mysql优化05慢查询(三)【】Mysql...
总结来说,企业级MySQL优化是一个综合性的任务,涵盖安装配置、引擎选择、算法理解、集群构建和日常维护等多个环节。通过深入理解MySQL的工作机制和优化技巧,可以有效地提升数据库性能,保障企业的业务运行。