从mysql数据库缓慢输出

时间:2016-04-04 14:02:30

标签: php mysql

我的数据库中只有一个表只有5列,它有大约13000行数据,当我在我的php页面上获取它时,它输出的数据非常慢。任何人都可以建议解决方案。

代码如下:

<?php 
    $sno = 1 ; 
    $form = 0 ; 
    $data = selectloop('data') ; 
    foreach($data as $datalist){ 
        $form = $form + 1 ; ?>
            <tr class="odd gradeX">
                <td ><?php echo $sno ; ?></td>
                <td ><?php echo $datalist['domain_name'] ; ?></td>
                <td ><?php echo $datalist['registrant_name'] ; ?></td>
                <td ><?php echo $datalist['registrant_city'] ; ?></td>
                <td ><?php echo $datalist['registrant_state'] ; ?></td>
                <td ><?php echo $datalist['registrant_email'] ; ?></td>
                <td ><?php echo $datalist['registrant_phone'] ; ?></td>
                <td>
                <?php if(isset($_POST['submit'.$form])) { 
                 mysql_query("update data set remarks='".$_POST['remarks']."' where id='".$_POST['id']."' ") ;
                 header("location:datalist.php") ; } ?>

                <form method="post">
                <input type="hidden" class="form-control" name="id" value="<?php echo $datalist['id'] ; ?>" >
                <input type="text" class="form-control" name="remarks">
                <button  class="btn btn-primary btn-xs" name="submit<?php echo $form ;?>" > Submit </button>
                </form>
                </td>
            </tr>
<?php $sno = $sno + 1 ; } ?>   
        </tbody>

2 个答案:

答案 0 :(得分:1)

您可以添加分页,这意味着您使用LIMIT和自动增量列作为主键,在本例中为id

PHP源代码:

$start = $_POST['start'];
$db = mysqli_connect("localhost","user","pass","dbName"); // MYSQLi API
$sql = "SELECT * FROM data WHERE id >= '$start' LIMIT 10"; // Default limit
foreach ($db->query($sql) as $row):
    echo '<tr>';
        [...]
             echo $row['column'];
        [...]
    echo '</tr>';
endif;

然后,您可以添加一个客户端处理程序,该处理程序会在“下一页”&#39;后面向PHP文件发送 POST 请求。按下按钮。它集成了实时分页,更整洁的页面和更少的页面加载时间。

jQuery POST示例:

$(document).ready(function () {
    var count = 1; // starting id
    $('#nextpage').click(function () {
        count = count +10;
        $.post('phpfile.php', { start: count })
            .done(function (data)
            {
                 $('#output').innerHTML = data;
            });
    });
});

HTML示例:

<div class='display-content'>
    <div id='output'></div>
    <div id='nextpage'>--Next-Page-></div>
</div>

希望这对您有所帮助,但请记住,您需要先在PHP中删除$start,然后再将其传递给查询,因为您未使用PDO

  

更新:确保阅读大量这些评论,MYSQL已弃用且不会在较新的PHP版本中提供 - 尤其是 PHP 7 + - 所以我建议您考虑安全性,了解PDO或至少MYSQLi

其他有用的资源:

MYSQLi Manual
PDO Manual
LIMIT Query
Preventing SQLi Injections

答案 1 :(得分:-1)

我强烈的直觉说你正试图输出大约13,000行到你的浏览器。当然,这会减慢速度。它不是MySQL的错误,尽管它很可能是由于您的查询中没有LIMIT子句。

为查询添加LIMIT:

$query = "SELECT * FROM `table` LIMIT x"; // where x is the number of records to be outputted