当前位置:首页 > MySQL教程 > 正文内容

进步工作效率:MySQL的优化技能【MySQL教程】,mysql,php

搜教程4年前 (2019-12-01)MySQL教程134
本篇文章给人人带来的内容是关于进步工作效率:MySQL的优化技能,有肯定的参考价值,有须要的朋侪可以参考一下,愿望对你有所协助。

1、在一切用于where,order by和group by的列上增加索引

1)索引除了可以确保唯一的标记一条纪录,还能是MySQL服务器更快的从数据库中猎取效果。索引在排序中的作用也非常大。

Mysql的索引能够会占有分外的空间,并且会肯定程度上下降插进去,删除和更新的机能。然则,假如你的表格有凌驾10行数据,那末索引就可以极大的下降查找的实行时间。

2)强烈建议运用“最坏状况的数据样本”来测试MySql查询,从而更清楚的相识查询在生产中的行动体式格局。

3)假定你正在一个凌驾500行的数据库表中实行以下的查询语句:

mysql>select customer_id, customer_name from customers where customer_id='345546'

上述查询会迫使Mysql服务器实行一个全表扫描来取得所查找的数据。

4)型号,Mysql供应了一个迥殊的Explain语句,用来剖析你的查询语句的机能。当你将查询语句增加到该关键词背面时,MySql会显现优化器对该语句的一切信息。

假如我们用explain语句剖析一下上面的查询,会获得以下的剖析效果:

mysql> explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | customers | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    10.00 | Using where |

可以看到,优化器展现出了非常重要的信息,这些信息可以协助我们微调数据库表。起首,MySql会实行一个全表扫描,由于key列为Null。其次,MySql服务器已明白示意它将要扫描500行的数据来完成此次查询。

5)为了优化上述查询,我们只须要在customer_id这一列上增加一个索引m即可:

mysql> Create index customer_id ON customers (customer_Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

假如我们再次实行explain语句,会获得以下效果:

mysql> Explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table     | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | customers | NULL       | ref  | customer_id   | customer_id | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+

2. 用Union优化Like语句

1)有时刻,你能够须要在查询中运用or操作符举行比较。当or关键字在where子句中运用频次太高的时刻,它能够会使MySQL优化器毛病的挑选全表扫描来检索纪录。union子句可所以查询实行的更快,尤其是当个中一个查询有一个优化索引,而另一个查询也有一个优化索引的时刻。

比方,在first_name和last_name上离别存在索引的状况下,实行以下查询语句:

mysql> select * from students where first_name like 'Ade%' or last_name like 'Ade%'

上述查询和下面运用union兼并两条充分利用查询语句的查询比拟,速率慢了很多。

mysql> select * from students where first_name like 'Ade%' union all select * from students wherelast_name like 'Ade%'

3. 防止运用带有前导通配符的表达式

当查询中存在前导通配符时,Mysql没法运用索引。以上面的student表为例,以下的查询会致使MySQL实行全表扫描,实时first_name字段上加了索引。

mysql> select * from students where first_name like '%Ade'

运用explain剖析获得以下效果:

 | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | students | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    11.11 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+

如上所示,Mysql将扫描悉数500行数据,这将使得查询极为迟缓。

4. 优化数据库架构

1)规范化

起首,规范化一切数据库表,纵然能够会有些丧失。比方,假如你须要建立两张表离别用来纪录customers和orders数据,你应该在order表上用主顾id援用主顾,而不是反过来。下图显现了没有任何数据冗余而设想的数据库架构。

5.运用最好数据范例

1)MySQL支撑种种数据范例,包含integer,float,double,date,datetime,varchar,text等。当设想数据库表时,应该尽量运用可以满足特征的最短的数据范例。

比方,假如你在设想一个体系用户表,而该用户数量不会凌驾100个人,你就应该对user_ud运用'TINYINT'范例,该范例的取值局限为-128至128。假如一个字段须要存储date型值,运用datetime范例比较好,由于在查询的时刻无需举行庞杂的范例转换。

当值全为数字范例时,运用Integer。在举行盘算时,Integer范例的值比文本范例的值速率更快。

以上就是进步工作效率:MySQL的优化技能的细致内容,更多请关注ki4网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/15621.html

标签: mysqlphp
分享给朋友:

“进步工作效率:MySQL的优化技能【MySQL教程】,mysql,php” 的相关文章

cookie属性和要领剖析【MySQL教程】,cookie,ie,解析

cookie属性和要领剖析【MySQL教程】,cookie,ie,解析

cookie属性详解 在chrome掌握台中的resources选项卡中能够看到cookie的信息。 一个域名下面能够存在着很多个cookie对象。 name字段为一个cookie的称号。 value字段为一个cookie的值。 domain字段为能够接见此cookie的域名。...

Mysql之运算符与函数的总结【MySQL教程】,Mysql,运算符,总结

本文给人人汇总引见了mysql中的经常运用的运算符以及经常运用函数的用法及示例,异常的周全,有须要的小伙伴能够参考下 我们先来看个示例 use test; create table `employee`( emp_no int unsigned, emp_name varc...

MySQL高可用解决方案MMM详解【MySQL教程】,MySQL,解决方案,详解

MySQL高可用解决方案MMM详解【MySQL教程】,MySQL,解决方案,详解

MySQL自身没有供应replication failover的解决计划,经由过程MMM计划能完成效劳器的毛病转移,从而完成mysql的高可用。MMM不仅能供应浮动IP的功用,假如当前的主效劳器挂掉后,会将你后端的从效劳器自动转向新的主效劳器举行同步复制,不必手工变动同步设置 一、MMM简介:...

CREATE DATABASE语句诠释【MySQL教程】,DATABASE,CREATE,解释

本文为mariadb官方手册:CREATE DATABASE的译文。 语法 CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_spec...

mysql5.1 command line client 登录时涌现闪退怎样处理【MySQL教程】,mysql5.1,command,client

由于长时间没有运用mysql command line client。今天在运用时,翻开界面,输入暗码后就涌现了闪退,同时workbench平台也显现不能衔接数据库。起首我照着百度试了一下,觉察在“计算机“-->"治理"(右键)-->“效劳”下,没有找到mysql有关的效劳。 处理办法以...

怎样运用mysql表衔接【MySQL教程】,mysql,连接,使用

怎样运用mysql表衔接【MySQL教程】,mysql,连接,使用

为何运用表衔接 什么是表衔接? 假如数据来自多个表,那末能够采纳链接查询的体式格局来完成。因而表衔接就是多个表衔接合在一起完成查询效果 表衔接的道理 表衔接采纳的是笛卡尔乘积,称之为横向衔接。 笛卡尔乘积 表衔接的基本道理就是采纳笛卡尔...