`
youyu4
  • 浏览: 435640 次
社区版块
存档分类
最新评论

MySQL的20+最佳实践

 
阅读更多

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

  • 大小: 11.6 KB
  • 大小: 49.2 KB
分享到:
评论

相关推荐

    MySQL++ v3.0.9 User Manual

    - 讨论在多线程环境中安全地共享MySQL++ 数据结构的最佳实践。 #### 八、配置MySQL++ - **MySQL开发文件的位置**: - 如何定位MySQL开发所需的头文件和其他资源。 - **最大允许列数**: - MySQL++ 支持的最大列数...

    MySQL 的 20+ 条最佳实践

    以下是一些针对程序员的MySQL最佳实践,旨在提升数据库性能和编写高效代码: 1. **利用查询缓存**:MySQL提供了查询缓存功能,它可以存储已执行过的查询结果,以便后续相同查询直接从缓存中获取,提高查询速度。...

    mysql++编程手册

    在用户手册`mysql++_userman.pdf`中,会更注重实际使用场景和最佳实践。它可能涵盖了如何安装和配置MySQL++,以及如何将MySQL++集成到C++项目中。手册可能会介绍错误处理机制,如异常处理,以及如何使用`sql_...

    mysql性能调优最佳实践

    mysql性能调优最佳实践 ppt格式 就是讲怎么优化mysql的。

    mysql++ 官方文档

    MySQL++ 是一个C++库,专门设计用于与MySQL数据库管理系统进行交互。...在阅读这份英文官方文档时,建议关注每个类的成员函数、构造函数和方法,以及它们的使用场景,以便深入理解MySQL++的工作原理和最佳实践。

    Mysql++-2.3.2

    他们还需要遵循C++编程的最佳实践,例如正确处理异常,以及在必要时使用智能指针来管理对象生命周期。 总的来说,Mysql++-2.3.2是C++开发人员与MySQL数据库交互的强大工具,它提供了丰富的功能,使得数据库操作变得...

    mysql++-1.7.27.tar.gz_C MYSQL_C++ sql_MYSQL_c++ mysql_mysql c++

    MySQL++ 是一个开源库,专为C++程序员设计,提供了与MySQL数据库交互的接口。它使得在C++程序中执行...记得在使用过程中遵循最佳实践,如适当处理异常、确保资源及时释放,以及正确使用预处理语句以确保应用的安全性。

    Mysql最佳实践32条

    本文将围绕知数堂吴炳锡所提出的MySQL最佳实践32条,针对硬件、MySQL版本、开发、安全、操作系统、MySQL配置和运维事项等几个方面,进行详细的知识点梳理。 首先,从硬件层面来看,BIOS的配置优化是非常重要的一个...

    MySQLDBA入门最佳实践

    #### 六、MySQL最佳实践 - **性能调优**:通过调整配置参数、优化查询语句等方式提升数据库的运行效率。 - **监控与故障排查**:建立有效的监控机制,及时发现并解决问题。 - **文档管理**:记录数据库的设计、变更...

    MySQL SQL基础语句最佳实践

    总的来说,掌握MySQL基础语句的最佳实践对于数据库开发者来说至关重要。通过对这些基础知识的学习和理解,开发者可以编写出高效、安全、可维护的数据库应用代码。而随着数据库技术的不断演进和优化,开发者也需要...

    MySQL开发最佳实践

    #### 一、前言:为何关注MySQL最佳实践? 随着业务规模的增长和技术复杂度的提升,合理地设计和管理数据库系统变得尤为重要。MySQL作为一款广泛应用的关系型数据库管理系统(RDBMS),其在性能优化、数据安全、高可用...

    Kubernetes中MySQL容器的最佳实践.pdf

    在Kubernetes环境中运行MySQL容器需要遵循一系列最佳实践,以确保数据的安全性、高可用性和性能。以下是一些关键知识点: 1. **存储策略**:在Kubernetes中,MySQL需要持久化存储来保存数据库数据。使用持久卷...

    mysql5.5+php+nginx脚本自动化部署

    9. **安全强化**:在部署过程中,应考虑安全最佳实践,如限制不必要的网络访问、禁用匿名FTP、定期更新软件以修复安全漏洞等。 10. **LMS_recovery**:这个文件名可能是恢复或备份相关的工具或脚本。在自动化部署中...

    mysql教程+手册

    总的来说,这份“mysql教程+手册”资源集合,将帮助你从零开始学习MySQL,直至掌握高级特性和最佳实践,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过阅读这两份CHM文档,你将能够深入理解MySQL的...

    MySQL 索引最佳实践

    ### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...

    尚硅谷mysql高级+尚硅谷springcloud思维导图.mmap

    尚硅谷周阳老师的MySQL高级课程深入讲解了MySQL的高级特性与最佳实践,旨在帮助学员掌握更深层次的数据库管理技能。以下是该课程可能涵盖的关键知识点: 1. SQL优化:包括查询优化、索引优化、存储引擎的选择以及...

    MySQL性能优化的21个最佳实践.pdf

    本文将详细介绍21个MySQL性能优化的最佳实践。 首先,查询缓存优化是提高MySQL性能的最有效方法之一。在MySQL服务器中,默认开启了查询缓存机制,它会存储那些重复执行的相同查询结果。一旦查询执行过一次,其结果...

Global site tag (gtag.js) - Google Analytics