我的x表中有大约(总共1,049,906,查询耗时0.0005秒),
如果我只是检索试图检索特定的字段记录,
它花了不到6分钟,
这是我的查询
SELECT CUSTOMER_CODE FROM X_TBL ;
CUSTOMER_CODE =>独一无二的
上面的问题是6MIN,
请联系我优化提示,
在某些搜索客户的情况下,我也使用了CUSTOMER_CODE,
从X_TBL中选择CUSTOMER_CODE WHERE CUSTOMER_CODE如“$ KEY_WORD%”
是的,我有索引。
如何检查脚本执行时间......在php中,
我使用了下面的代码片段,但它总是显示出增加...
list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;
此致 Bharanikumar
答案 0 :(得分:2)
如果我理解这一点,你在表格中有超过一百万条记录,并想知道为什么一次从所有中获取CUSTOMER_CODE需要6分钟?没有什么可以“优化”,很可能你需要构建类似
的不同查询SELECT CUSTOMER_CODE FROM X_TBL LIMIT 0, 100;
或
SELECT COUNT(CUSTOMER_CODE) FROM X_TBL;
或者其他什么,取决于您尝试解决的任务。
截至CUSTOMER_CODE
进行搜索,LIKE "$KEY_WORD%"
CUSTOMER_CODE
上的{{1}}简单索引会有所帮助,但请勿尝试选择所有记录立刻,除了你确实需要这个的情况。
答案 1 :(得分:1)
您可以尝试使用索引,它可以非常优化查询时间。
试试这个链接:
答案 2 :(得分:0)
也许实际的数据传输是瓶颈。通常可以避免将关系数据库中的所有数据传输到另一个位置(进程)。
但是为了论证和测试这是否真的是瓶颈:您可以尝试一个无缓冲的查询,即使用在返回之前不传输所有数据的函数/方法,请参阅PDO::MYSQL_ATTR_USE_BUFFERED_QUERY和{ {3}}。
虽然我们在这里,你也可以尝试mysql_unbuffered_query,看看它是否能解释这个问题。
$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;
答案 3 :(得分:0)
如果表中有这么多记录,那么第一件事就是将表引擎更改为innodb(如果它不是innodb),因为对于大量记录,innodb在缓存表数据时要快得多,而相反myisam引擎只缓存索引,因此如果无法从索引中获取所需的数据,则每次必须从磁盘执行全表扫描。
其次,如果你想继续使用myisam,那么在CUSTOMER_CODE列上创建一个索引。这将使查询更快,因为所有mysql必须做的是获取查询的索引:
SELECT CUSTOMER_CODE FROM X_TBL