首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询优化

mysql查询优化
EN

Stack Overflow用户
提问于 2010-05-31 15:49:04
回答 4查看 627关注 0票数 2

我的x表中大约有(总共1,049,906个,查询耗时0.0005秒),

如果我简单地检索尝试检索特定字段记录,

它看起来不到6分钟,

这是我的问题

代码语言:javascript
复制
SELECT CUSTOMER_CODE FROM X_TBL ;

CUSTOMER_CODE =>唯一

上面的查询花了6分钟,

告诉我这方面的优化技巧,

在某些情况下,为了搜索客户,我使用了CUSTOMER_CODE,

选择CUSTOMER_CODE from X_TBL WHERE CUSTOMER_CODE LIKE "$KEY_WORD%“

是的,我有索引。

如何检查脚本执行timing...in php

我已经使用了下面的代码片段,但它总是朝着递增的方向发展..

代码语言:javascript
复制
   list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;

关于Bharanikumar

EN

回答 4

Stack Overflow用户

发布于 2010-05-31 17:08:46

如果我理解正确的话,您在一个表中有超过一百万条记录,并且想知道为什么要花6分钟才能一次从所有记录中获取CUSTOMER_CODE ?没有什么需要“优化”的,很可能你需要构建不同的查询,比如

代码语言:javascript
复制
SELECT CUSTOMER_CODE FROM X_TBL LIMIT 0, 100;

代码语言:javascript
复制
SELECT COUNT(CUSTOMER_CODE) FROM X_TBL;

或者其他什么,这取决于你想要解决的任务。

在使用CUSTOMER_CODE进行搜索时,在CUSTOMER_CODE上建立简单的索引将会有所帮助,但同样,不要尝试一次选择所有记录,除非您确实需要这样做。

票数 2
EN

Stack Overflow用户

发布于 2010-05-31 15:56:39

你可以尝试使用索引,它的查询时间非常优化。

请尝试此链接:

http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm

票数 1
EN

Stack Overflow用户

发布于 2010-05-31 18:05:30

也许实际的数据传输才是瓶颈。通常会避免将关系数据库中的所有数据转移到另一个位置(进程)。

但对于参数和测试这是否真的是瓶颈:您可以尝试无缓冲查询,即使用在返回之前不传输所有数据的函数/方法,请参阅PDO::MYSQL_ATTR_USE_BUFFERED_QUERYmysql_unbuffered_query

在此期间,您还可以尝试使用MySQL's EXPLAIN,看看它是否有助于解决这个问题。

代码语言:javascript
复制
$pdo = new PDO("mysql:host=localhost;dbname=test", 'localonly', 'localonly'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$KEY_WORD = 'something%';

foreach( $pdo->query("EXPLAIN SELECT CUSTOMER_CODE FROM X_TBL WHERE CUSTOMER_CODE LIKE '$KEY_WORD'", PDO::FETCH_ASSOC) as $row ) {
  foreach($row as $k=>$v) {
    echo "$k=$v | ";
  }
  echo "<br />\n";
}


$start = microtime(true);
// test #1
if ( true ) {  // set this to false after the first test  
  $stmt = $pdo->prepare('SELECT CUSTOMER_CODE FROM X_TBL', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
  $stmt->execute();
}
// test #2
else {
  $stmt = $pdo->prepare('SELECT CUSTOMER_CODE FROM X_TBL WHERE CUSTOMER_CODE LIKE :search', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
  $stmt->execute( array(':search'=>$KEY_WORD) );
}
$end = microtime(true);

echo 'time: ', $end-$start;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2942123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档