主页 > 教育培训 > 电脑培训 > 正文

MySQL学习:数据库十大优化技巧(2)

[作者:ardlr]
2012-11-21 17:38

  在这种情况下,增加一个LIMIT 1会令你的查询更加有效。这样数据库引擎发现只有1后将停止扫描,而不是去扫描整个表或索引。

  // do I have any users from Alabama

  // what NOT to do:

  $r = mysql_query("SELECT * FROM user WHERE state = 'Alabama'");

  if (mysql_num_rows($r) > 0) {

  // ...

  }

  // much better:

  $r = mysql_query("SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1");

  if (mysql_num_rows($r) > 0) {

  // ...

  }

  4. 索引中的检索字段

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

  

数据库优化

 

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

  如果应用程序中包含多个连接查询,你需要确保你链接的列在两边的表上都被索引。这会影响MySQL如何优化内部联接操作。

  此外,加入的列,必须是同一类型。例如,你加入一个DECIMAL列,而同时加入另一个表中的int列,MySQL将无法使用其中至少一个指标。即使字符编码必须同为字符串类型。

  // looking for companies in my state

  $r = mysql_query("SELECT company_name FROM users

  LEFT JOIN companies ON (users.state = companies.state)

  WHERE users.id = $user_id");

  // both state columns should be indexed

  // and they both should be the same type and character encoding

  // or MySQL might do full table scans

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

  这是一个令很多新手程序员会掉进去的陷阱。你可能不知不觉中制造了一个可怕的平静。这个陷阱在你是用BY RAND()命令时就开始创建了。

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

  //what NOT to do:

  $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");

  // much better:

  $r = mysql_query("SELECT count(*) FROM user");

  $d = mysql_fetch_row($r);

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

  $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

  7. 尽量避免SELECT *命令

  从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要操作的时间,还是在数据库服务器与WEB服务器是独立分开的情况下。你将会经历非常漫长的网络延迟,仅仅是因为数据不必要的在服务器之间传输。

  始终指定你需要的列,这是一个非常良好的习惯。

  // not preferred

  $r = mysql_query("SELECT * FROM user WHERE user_id = 1");

  $d = mysql_fetch_assoc($r);

  echo "Welcome {$d['username']}";

  // better:

  $r = mysql_query("SELECT username FROM user WHERE user_id = 1");

  $d = mysql_fetch_assoc($r);

  echo "Welcome {$d['username']}";

  // the differences are more significant with bigger result sets

猜你喜欢

编辑推荐

相关内容

推荐阅读

加载中...
没有更多了
X