mysql如何优化sql查询,mysql查询优化的几种方法

mysql如何优化sql查询,mysql查询优化的几种方法,提升MYSQL查询效率的10个SQL语句优化技巧

MySQL数据库的执行效率对程序的执行速度影响很大,对数据库进行有效的处理和优化是非常有用的。尤其是当需要处理大量数据时。

MySQL数据库的执行效率对程序的执行速度影响很大,对数据库进行有效的处理和优化是非常有用的。尤其是当需要处理大量数据时。

1. 优化你的MySQL查询缓存

MySQL服务器上的查询可以实现高速查询缓存。提高性能的最有效方法之一是让数据库引擎在后台安静地处理它。同一个查询执行多次时,如果从缓存中提取结果,是相当快的。

但主要问题是,它是如此容易隐藏,以至于我们大多数程序员都会忽略它。在一些处理任务中,我们实际上可以阻止查询缓存工作。

//查询缓存不起作用

$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=CURDATE()');

//查询缓存有效!

$ today=date(' Y-m-d ');

$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=' $ today ' ');

//查询缓存不起作用

$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=CURDATE()');

//查询缓存有效!

$ today=date(' Y-m-d ');

$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=' $ today ' ');

2. 用EXPLAIN使你的SELECT查询更加清晰

使用EXPLAIN关键字是另一种MySQL优化技术,可以让你知道MySQL在做什么样的查询操作。这可以帮助您找到瓶颈,并显示查询或表结构哪里出错了。

EXPLAIN查询的结果可以告诉您哪些索引被引用,表是如何被扫描和排序的,等等。

实现一个选择查询(最好是带有连接的复杂查询),并向其中添加关键字解释。在这里,我们可以使用phpMyAdmin,他会告诉你表中的结果。例如,如果我在执行连接时忘记向索引中添加列,EXPLAIN可以帮助我找到问题。

3. 利用LIMIT 1取得唯一行

有时候,当您想要查询一个表时,您知道您只需要查看一行。您可能会找到一个非常独特的记录,或者只是检查任何现有记录的数量,它们都满足您的WHERE子句。

在这种情况下,添加LIMIT 1将使您的查询更有效。这样,数据库引擎将在只找到1后停止扫描,而不是扫描整个表或索引。

//我有来自阿拉巴马的用户吗?

//不要做什么:

$ r=MySQL _ query(' SELECT * FROM user WHERE state=' Alabama ' ');

if (mysql_num_rows($r) 0) {

//.

}

//好多了:

$ r=MySQL _ query(' SELECT 1 FROM user WHERE state=' Alabama ' LIMIT 1 ');

if (mysql_num_rows($r) 0) {

//.

}

4. 索引中的检索字段

索引不仅是主键或唯一键。如果要搜索表中的任何列,应该始终指向索引。

5. 保证连接的索引是相同的类型

如果应用程序包含多个连接查询,您需要确保您链接的列在两个表上都有索引。这将影响MySQL优化内部连接操作的方式。

此外,添加的列必须属于同一类型。例如,如果同时在另一个表中添加一个DECIMAL列和一个int列,MySQL将无法使用至少一个指示器。即使字符编码必须是相同的字符串类型。

//寻找我所在州的公司

$r=mysql_query('从用户中选择公司名称

打开左加入公司(users.state=companies.state)

其中users . id=$ user _ id’);

//两个状态列都应该被索引

//并且它们应该是相同的类型和字符编码

//或者MySQL可能会进行全表扫描

6. 不要使用BY RAND()命令

这是很多程序员新手都会陷入的陷阱。你可能无意识地创造了一种可怕的平静。这个陷阱是在您使用BY RAND()命令时创建的。

如果你真的需要随机显示你的结果,有很多更好的方法可以实现。确实需要写更多的代码,但是可以避免性能瓶颈。问题是MySQL可能会对表中每个独立的行执行BY RAND()命令(这会消耗处理器的处理能力),然后只返回一行给你。

//不要做什么:

$ r=MySQL _ query(' SELECT username FROM user ORDER BY RAND()LIMIT 1 ');

//好多了:

$ r=MySQL _ query(' SELECT count(*)FROM user ');

$ d=MySQL _ fetch _ row($ r);

$rand=mt_rand(0,$ d[0]-1);

$r=mysql_query('从用户限制中选择用户名$rand,1 ');

7. 尽量避免SELECT *命令

从表中读取的数据越多,查询就越慢。他增加了磁盘操作所需的时间,即使数据库服务器和WEB服务器是独立的。你会经历很长的网络延迟,仅仅是因为数据在服务器之间不必要的传输。总是指定您需要的列,这是一个非常好的习惯。

//不是首选

$ r=MySQL _ query(' SELECT * FROM user WHERE user _ id=1 ');

$ d=MySQL _ fetch _ assoc($ r);

echo 'Welcome {$d['用户名']} ';

//更好:

$ r=MySQL _ query(' SELECT username FROM user WHERE user _ id=1 ');

$ d=MySQL _ fetch _ assoc($ r);

echo 'Welcome {$d['用户名']} ';

//结果集越大,差异越明显

8.从程序分析中获取建议()

ProcedureAnalyze()可以让MySQL的列结构分析和表中的实际数据给你一些建议。如果实际数据已经存在于您的表中,它可以为您的重要决策服务。

9.准备好的声明

准备好的语句可以从性能优化和安全性方面帮助你。

默认情况下,预处理语句可以通过过滤绑定变量来有效地保护应用程序并防止SQL注入攻击。当然也可以手动筛选,但是由于大部分程序员都比较健忘,很难达到效果。

//创建准备好的语句

if($ stmt=$ mysqli-prepare(' SELECT username FROM user WHERE state=?')) {

//绑定参数

$stmt-bind_param('s ',$ state);

//执行

$ stmt-execute();

//绑定结果变量

$ stmt-bind _ result($ username);

//获取值

$ stmt-fetch();

printf('%s来自%s\n ',$username,$ state);

$ stmt-close();

}

10. 将IP地址存储为无符号整型

许多程序员在创建VARCHAR(15)时没有意识到他们可以将IP地址存储为整数。当你有一个INT类型时,你只占用4个字节的空间,这是一个固定大小的字段。

您必须确保正在操作的列是无符号INT类型,因为IP地址将使用32位无符号整数。

1.$ r=' UPDATE users SET IP=INET _ ATON(' { $ _ SERVER[' REMOTE _ ADDR ']} ')其中user _ id=$ user _ id ';

MYSQL的查询语句很多。今天就来说说这10种。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • pymysql菜鸟教程,pymysql 使用
  • pymysql菜鸟教程,pymysql 使用,pymysql模块使用简介与示例
  • mysql锁实现,mysql锁算法
  • mysql锁实现,mysql锁算法,MySQL锁机制与用法分析
  • mysql连接报错10061,mysql连接错误10060
  • mysql连接报错10061,mysql连接错误10060,MYSQL无法连接 提示10055错误的解决方法
  • mysql连接报10060错误,mysql连接报错10055
  • mysql连接报10060错误,mysql连接报错10055,MySQL连接异常报10061错误问题解决
  • mysql辅助索引和主键索引,mysql 主键 外键 索引
  • mysql辅助索引和主键索引,mysql 主键 外键 索引,MySQL索引之主键索引
  • MySQL语句大全,mysql常见语句总结
  • MySQL语句大全,mysql常见语句总结,MySQL语句整理及汇总介绍
  • mysql触发器的使用方法实验报告,mysql中触发器的使用
  • 留言与评论(共有 条评论)
       
    验证码: