MySQL的20+最佳实践
1. 优化查询的查询缓存
大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。
2. explain你的选择查询
使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的……等等,等等。
在一个select查询(有连接的复杂查询)的前面加上explain,就会显示相关的信息
EXPLAIN SELECT c.id, cl.question, cl.lang, cl.answer FROM cs_faq c LEFT JOIN cs_faq_lang cl ON cl.cs_faq_id = c.id WHERE c.id < 10;
3. 获取唯一一行时用LIMIT 1
确定了只有一条数据后,使用LIMIT 1的好处是,当扫描到数据后就停止扫描,不会再遍历后面的表和索引。
4. 适当加索引
一般要加索引的情况如下:
1)where后面的条件
2)搜索字段,如like ‘aa%’,就可以加索引,但是like ‘%aa%’,就没有效果。可以改用全文索引。
3)要在重复性低的字段加索引
5. 使用索引时,用到字段连接,要相同数据类型
如果使用一个decimal字段,连接另一个int字段,MySQL就无法使用这些字段的索引来索引合并后的字段。
// 在state中查找company $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id"); // 两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集。
6.不要用order by RAND()
7. 尽量不用select * ,查询更少的字段会更快
8. 所有表都要有一个id主键,并且一般是用int 并且AUTO_INCREMENT
9. 相比varchar,优先使用enum
enum所占用空间更少,如果像status列,存放的是状态字符串,“active”,“inactive”,“pending”等,这类用enum会更省空间
10. 使用procedure analyse(),获取表字段的建议
SELECT * FROM faq_lang procedure analyse();
前面的列都是表信息,最后一列就是建议。不过这只是建议,我们还是要根据实际情况选择是否修改表字段。
11. 如果可以的话,尽量使用 not null
1)除非有非常重要的理由使用null,否则将列设置未not null
2)要清楚空字符串和null的区别
3)null需要额外的空间,会增加比较语句的复杂度
12. 预处理语句
使用PrepareStatement,预编译的方式,可以防止SQL注入的问题。
13. 无缓冲查询
14. 使用unsigned int 存储IP地址
一般我们会用varchar(15)存IP地址,如果用unsigned int,占用空间会更小
15. 固定长度(静态)的表会更快
不固定长度列的类型包括:varchar、text、blob,如果用固定长度,检索的时候会更快,但是会浪费一部分空间。
16. 垂直分表
例如:一张用户表,包含家庭住址,而这个不是常用的数据。这样就可以将地址拆分出来,保存到另一个表中,用户表越小查询就越快。
17. 拆分大型delete和insert语句
这种大型SQL语句会锁表,并使得Web应用程序停止。这样对导致其他用户无法使用,为了避免这种情况,可以执行一部分SQL后sleep()一段时间。
18. 越小的列,越少的列,越快
19. 正确的选择存储引擎
1)MyISAM,表锁,适合大量的查询
2)InnoDB,行锁,适合跟多的更新数据,支持事务,支持崩溃回滚
20. 使用对象关系映射器,ORM
1)方便数据迁移
2)可以将多个查询批处理到事务中,比向数据库发起单个查询更快
21. 小心持久链接
1)减少重新连接到MySQL的成本
2)但可能会遇到连接数限制问题,内存问题
参考:
http://coolshell.cn/articles/1846.html
相关推荐
- 讨论在多线程环境中安全地共享MySQL++ 数据结构的最佳实践。 #### 八、配置MySQL++ - **MySQL开发文件的位置**: - 如何定位MySQL开发所需的头文件和其他资源。 - **最大允许列数**: - MySQL++ 支持的最大列数...
以下是一些针对程序员的MySQL最佳实践,旨在提升数据库性能和编写高效代码: 1. **利用查询缓存**:MySQL提供了查询缓存功能,它可以存储已执行过的查询结果,以便后续相同查询直接从缓存中获取,提高查询速度。...
在用户手册`mysql++_userman.pdf`中,会更注重实际使用场景和最佳实践。它可能涵盖了如何安装和配置MySQL++,以及如何将MySQL++集成到C++项目中。手册可能会介绍错误处理机制,如异常处理,以及如何使用`sql_...
mysql性能调优最佳实践 ppt格式 就是讲怎么优化mysql的。
MySQL++ 是一个C++库,专门设计用于与MySQL数据库管理系统进行交互。...在阅读这份英文官方文档时,建议关注每个类的成员函数、构造函数和方法,以及它们的使用场景,以便深入理解MySQL++的工作原理和最佳实践。
他们还需要遵循C++编程的最佳实践,例如正确处理异常,以及在必要时使用智能指针来管理对象生命周期。 总的来说,Mysql++-2.3.2是C++开发人员与MySQL数据库交互的强大工具,它提供了丰富的功能,使得数据库操作变得...
MySQL++ 是一个开源库,专为C++程序员设计,提供了与MySQL数据库交互的接口。它使得在C++程序中执行...记得在使用过程中遵循最佳实践,如适当处理异常、确保资源及时释放,以及正确使用预处理语句以确保应用的安全性。
本文将围绕知数堂吴炳锡所提出的MySQL最佳实践32条,针对硬件、MySQL版本、开发、安全、操作系统、MySQL配置和运维事项等几个方面,进行详细的知识点梳理。 首先,从硬件层面来看,BIOS的配置优化是非常重要的一个...
#### 六、MySQL最佳实践 - **性能调优**:通过调整配置参数、优化查询语句等方式提升数据库的运行效率。 - **监控与故障排查**:建立有效的监控机制,及时发现并解决问题。 - **文档管理**:记录数据库的设计、变更...
总的来说,掌握MySQL基础语句的最佳实践对于数据库开发者来说至关重要。通过对这些基础知识的学习和理解,开发者可以编写出高效、安全、可维护的数据库应用代码。而随着数据库技术的不断演进和优化,开发者也需要...
#### 一、前言:为何关注MySQL最佳实践? 随着业务规模的增长和技术复杂度的提升,合理地设计和管理数据库系统变得尤为重要。MySQL作为一款广泛应用的关系型数据库管理系统(RDBMS),其在性能优化、数据安全、高可用...
在Kubernetes环境中运行MySQL容器需要遵循一系列最佳实践,以确保数据的安全性、高可用性和性能。以下是一些关键知识点: 1. **存储策略**:在Kubernetes中,MySQL需要持久化存储来保存数据库数据。使用持久卷...
9. **安全强化**:在部署过程中,应考虑安全最佳实践,如限制不必要的网络访问、禁用匿名FTP、定期更新软件以修复安全漏洞等。 10. **LMS_recovery**:这个文件名可能是恢复或备份相关的工具或脚本。在自动化部署中...
总的来说,这份“mysql教程+手册”资源集合,将帮助你从零开始学习MySQL,直至掌握高级特性和最佳实践,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过阅读这两份CHM文档,你将能够深入理解MySQL的...
### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...
尚硅谷周阳老师的MySQL高级课程深入讲解了MySQL的高级特性与最佳实践,旨在帮助学员掌握更深层次的数据库管理技能。以下是该课程可能涵盖的关键知识点: 1. SQL优化:包括查询优化、索引优化、存储引擎的选择以及...
`MHA`是一个用于MySQL集群的高可用性管理工具,它能实时监控MySQL主从复制的状态,并在主服务器故障时自动选择最佳的备份服务器升级为主,同时处理数据同步,确保数据一致性。MHA不仅可以检测并处理主服务器的故障,...
本文将详细介绍21个MySQL性能优化的最佳实践。 首先,查询缓存优化是提高MySQL性能的最有效方法之一。在MySQL服务器中,默认开启了查询缓存机制,它会存储那些重复执行的相同查询结果。一旦查询执行过一次,其结果...
### MySQL最佳实践详解 #### 一、MySQL简介与特点 MySQL是一种关系型数据库管理系统(RDBMS),它与其他知名的关系型数据库如Oracle、SQL Server、DB2等并驾齐驱,在开源领域内尤其受到广泛欢迎。MySQL以其高效稳定...