我的x表中大约有(总共1,049,906个,查询耗时0.0005秒),
如果我简单地检索尝试检索特定字段记录,
它看起来不到6分钟,
这是我的问题
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
我已经使用了下面的代码片段,但它总是朝着递增的方向发展..
list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;关于Bharanikumar
发布于 2010-05-31 17:08:46
如果我理解正确的话,您在一个表中有超过一百万条记录,并且想知道为什么要花6分钟才能一次从所有记录中获取CUSTOMER_CODE ?没有什么需要“优化”的,很可能你需要构建不同的查询,比如
SELECT CUSTOMER_CODE FROM X_TBL LIMIT 0, 100;或
SELECT COUNT(CUSTOMER_CODE) FROM X_TBL;或者其他什么,这取决于你想要解决的任务。
在使用CUSTOMER_CODE进行搜索时,在CUSTOMER_CODE上建立简单的索引将会有所帮助,但同样,不要尝试一次选择所有记录,除非您确实需要这样做。
发布于 2010-05-31 15:56:39
你可以尝试使用索引,它的查询时间非常优化。
请尝试此链接:
http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm
发布于 2010-05-31 18:05:30
也许实际的数据传输才是瓶颈。通常会避免将关系数据库中的所有数据转移到另一个位置(进程)。
但对于参数和测试这是否真的是瓶颈:您可以尝试无缓冲查询,即使用在返回之前不传输所有数据的函数/方法,请参阅PDO::MYSQL_ATTR_USE_BUFFERED_QUERY和mysql_unbuffered_query。
在此期间,您还可以尝试使用MySQL's EXPLAIN,看看它是否有助于解决这个问题。
$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;https://stackoverflow.com/questions/2942123
复制相似问题