本文主要介绍了三种有用的优化mysql数据库查询的方法。在实践中,我们有时会觉得MySQL数据库查询在某些应用程序中似乎有点“。过时”,那么如何改造呢?
在优化查询中,数据库应用(如MySQL(与php的最佳结合))意味着工具的操作和使用。利用索引,利用EXPLAIN分析查询,调整MySQL的内部配置(与PHP的最佳组合),可以达到优化查询的目的。
任何一个数据库程序员都会有这样的经历:在一个高流量的数据库驱动中,一条不好的SQL查询语句会对整个应用的运行产生严重的影响,不仅会消耗更多的数据库时间,还会影响到其他的应用组件。
像其他学科一样,优化查询性能很大程度上取决于开发人员的直觉。幸运的是,像MySQL(与PHP的最佳组合)这样的数据库附带了一些辅助工具。本文简单讨论了三种工具:使用索引、用EXPLAIN分析查询和调整MySQL的内部配置(与PHP的最佳组合)。
1.使用索引
MySQL(与PHP的最佳组合)允许对数据库表进行索引,这样就可以快速找到记录,而无需一开始就扫描整个表,从而显著加快了查询速度。每个表最多可以有16个索引,MySQL(与PHP的最佳组合)也支持多列索引和全文搜索。
向表中添加索引非常简单,只需调用CREATE INDEX命令并指定索引的域。一个列表给出了一个例子:
列表a
1.MySQL(与PHP的最佳组合) >:在users(username)上创建索引idx _ username
2.查询正常,1行受影响(0.15秒)
3.记录:1重复项:0警告:0
这里,users表的username字段被索引,以确保在WHERE或HAVING子句中引用该字段的SELECT查询语句比没有添加索引时运行得更快。您可以检查该索引是否是由SHOW INDEX命令创建的(列表B)。
名单b
1.MySQL(与PHP的最佳组合) >:显示来自用户的索引;
2.- + - + - + - + - + - + - + - + - +
3.| Table | Non _ unique | Key _ name | Seq _ in _ Index | Column _ name | Collation | Cardinality | Sub _ part | Packed | Null | Index _ type | Comment |
4.- + - + - + - + - + - + - + - + - +
5.|用户| 1 | idx _用户名| 1 |用户名| A | NULL | NULL | NULL | YES | BTREE | |
6.- + - + - + - + - + - + - + - + - +
集合中的7.1行(0.00秒)
值得注意的是,索引就像一把双刃剑。通常没有必要索引表的每个字段,而且可能会降低运行速度,因为MySQL(与PHP的最佳组合)每次在表中插入或修改数据时都要重新索引这些额外的作业。
另一方面,避免索引表的每个字段并不是一个很好的主意,因为当插入记录的速度增加时,查询操作会变慢。需要找到一个平衡点。比如在设计索引系统时,考虑表的主要功能(数据修复和编辑)是明智的选择。
2.优化查询性能
在分析查询性能时,考虑EXPLAIN关键字也很有用。EXPLAIN关键字通常放在SELECT查询语句的前面,用来描述MySQL(与PHP的最佳组合)如何执行查询操作,以及MySQL(与PHP的最佳组合)需要多少行才能成功返回结果集。以下简单的例子可以说明这一过程(列表C):
列表c
1.MySQL(与PHP的最佳组合) >:解释SELECT city.name,city.district FROM city,country其中city.countrycode = country.code和country.code = ' IND
2.+ - + - + - + - + - + - + - + - + - + - +
3.| id | select _ type | table | type | possible _ keys | key | key _ len | ref | rows | Extra |
4.+ - + - + - + - + - + - + - + - + - + - +
| 1 |简单|国家|常量| Prima | Prima | RY | 3 |常量| 1 |使用索引|
1.| 1 |简单|城市|全部|空|空|空|空| 4079 |使用where |
2.+ - + - + - + - + - + - + - + - + - + - +
集合中的2行(0.00秒)此处的查询基于两个表连接。EXPLAIN关键字描述了MySQL(PHP的最佳组合)如何处理这两个表的连接。必须明确的是,当前的设计要求MySQL(与PHP的最佳组合)处理country表中的一条记录和city表中的全部4019条记录。这意味着可以使用其他优化技术来改进它的查询方法。例如,将以下索引添加到城市表(列表D):
列表d
1.MySQL(与PHP的最佳组合) >:在city(countrycode)上创建索引idx _ ccode
2.查询正常,受影响的4079行(0.15秒)
3.记录:4079重复项:0警告:0
现在,当我们重用EXPLAIN关键字进行查询时,我们可以看到一个显著的改进(列表E):
列表e
1.MySQL(与PHP的最佳组合) >:解释SELECT city.name,city.district FROM city,country其中city.countrycode = country.code和country.code = ' IND
2.+ - + - + - + - + - + - + - + - + - + - +
3.| id | select _ type | table | type | possible _ keys | key | key _ len | ref | rows | Extra |
4.+ - + - + - + - + - + - + - + - + - + - +
5.| 1 |简单|国家|常量| Prima | Prima | RY | 3 |常量| 1 |使用索引|
6.| 1 |简单|城市| ref | idx _ ccode | idx _ ccode | 3 | const | 333 |使用where |
7.+ - + - + - + - + - + - + - + - + - + - +
集合中的8.2行(0.01秒)
在这个例子中,MySQL(与PHP的最佳组合)现在只需要扫描city表中的333条记录就可以产生一个结果集,扫描的记录数量几乎减少了90%!数据库资源的查询自然更快更高效。
3.调整内部变量
MySQL(与PHP的最佳组合)非常开放,很容易进一步调整其默认设置,以获得更好的性能和稳定性。优化所需的一些关键变量如下:
更改索引缓冲区长度(key_buffer)
通常,这个变量控制处理索引表(读/写操作)时使用的缓冲区的长度。MySQL(与PHP的最佳组合)的用户手册指出,这个变量可以不断增加,以保证索引表的最佳性能,建议使用系统内存25%的大小作为这个变量的值。这是MySQL最重要的配置变量之一(与PHP的最佳组合)。如果您对优化和提高系统性能感兴趣,可以从更改key_buffer_size变量的值开始。
更改表长度(读缓冲区大小)
当一个查询不断扫描某个表时,MySQL(与PHP的最佳组合)会为其分配一个内存缓冲区。read_buffer_size变量控制这个缓冲区的大小。如果您认为连续扫描速度太慢,可以通过增加变量值和内存缓冲区的大小来提高其性能。
设置打开表的最大数量(table_cache)
该变量控制MySQL(与PHP的最佳组合)在任何时候可以打开的最大表数,从而控制服务器响应输入请求的能力。它与max_connections变量密切相关。增加table_cache的值可以让MySQL(与PHP的最佳组合)打开更多的表,就像增加max_connections的值可以增加连接数一样。当收到来自不同数据库和表的大量请求时,可以考虑更改该值。
为慢速查询设置时间限制(long_query_time)。
MySQL(与PHP的最佳组合)带有“慢速查询日志”,它会自动记录所有在特定时间范围内没有结束的查询。该日志对于跟踪低效或行为不当的查询以及查找优化对象非常有用。long_query_time变量控制这个以秒为单位的最大时间限制。
讨论并给出分析和优化SQL查询的三种工具的用法,以提高应用程序的性能。愉快地使用它们进行优化!
关键词:MySQL,数据库,数据库查找
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227150.html