要修改一下网站的统计模块,现在后台的统计数据查询特别的慢,
有哪位做过这个的,麻烦告知一下如果建表能够减少查询时间...
ps: 需要获得的是 今日访问 ip量  总的访问ip量  以及详细的时间ip 地址

解决方案 »

  1.   

    我可以给你提供一个解决的模式,但具体如何来实现要看你的表结构,
    就是采用“分区”的模式。
    我建议你把表里面增加一个字段,这个字段是IP访问你的网站的时间被转换成LONG型的以个值。比如2009-1-26 02:02:02这个时间转换成LONG型的以毫秒为单位的数值是类似1232525252525这么个结构的数值,你把这个数值 作为分区的标志,把你的表分区。
    分区你应该会吧。如果不会就去看看API,很简单的。
    这样你的查询速度你会发现如果按时间查就把你的时间转换成这个值再以此为 查询条件去查询,你会发现相当快。
    我做200W条的数据查询都是采用分区,很快的。尤其你的分区设计合理了。
      

  2.   

    1、通过PHP MYSQL实现 网站在线人数统计:
    网站在线人数的程序代码,后台有MySQL(和PHP搭配之最佳组合)数据库支持。可以直接统计出网站当前的在线人数。首先是创建MySQL(和PHP搭配之最佳组合)数据库表。CREATE TABLE tablename (
    field type(max_length) DEFAULT 'default_value' (NOT) NULL
    }可以使用的SQL语句。CREATE TABLE useronline (
    timestamp int(15) DEFAULT '0' NOT NULL,
    ip varchar(40) NOT NULL,
    file varchar(100) NOT NULL,
    Prima(最完善的虚拟主机管理系统)RY KEY (timestamp),
    KEY ip (ip),
    KEY file (file)
    );
    下面我们开始使用PHP脚本,首先定义MySQL(和PHP搭配之最佳组合)的信息。$server = "localhost"; //你的服务器
    $db_user = "root"; //你的MySQL(和PHP搭配之最佳组合)的用户名
    $db_pass = "password"; //你的MySQL(和PHP搭配之最佳组合)的密码
    $database = "users"; //表的名字
    设置统计的时间(多少秒内在线人数)$timeoutseconds = 300;取当前时间。$timestamp = time();上面的完整代码:<?php
    $server = "localhost"; //your server
    $db_user = "root"; //your MySQL(和PHP搭配之最佳组合) database username
    $db_pass = "password"; //your MySQL(和PHP搭配之最佳组合) database password if any
    $database = "users"; //the db name
    $timeoutseconds = 300;//timeoutseconds limit
    //get the current time
    $timestamp = time();
    //calculate the lowest timestamp allowed
    $timeout = $timestamp-$timeoutseconds;
    ?>连接MySQL(和PHP搭配之最佳组合)MySQL(和PHP搭配之最佳组合)_connect('localhost', 'username', 'password');
    也允许使用变量形式。
    MySQL(和PHP搭配之最佳组合)_connect($server, $db_user, $db_pass);如果MySQL(和PHP搭配之最佳组合)数据库没有密码的话可以使用下面代码连接(当然建议大家一定要设置好自己的密码,这样起码黑客得要解密啊)
    MySQL(和PHP搭配之最佳组合)_connect($server, $db_user);查询数据库的代码:
    MySQL(和PHP搭配之最佳组合)_db_query('database', 'query');
    我们只要有访客就要增加一条记录。$insert = MySQL(和PHP搭配之最佳组合)_db_query($database, "INSERT INTO useronline VALUES
    ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");然后我们给出如果用户用错误信息的处理方式。
    if(!($insert)) {
    print "Useronline Insert Failed > ";
    }然后我们得实现当超过我们设置的时间我们就要删除该用户记录。
    $delete = MySQL(和PHP搭配之最佳组合)_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。if(!($delete)) {
    print "Useronline Delete Failed > ";
    }
    下面我们显示数据库中有多少个不同的IP$result = MySQL(和PHP搭配之最佳组合)_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
    我们使用MySQL(和PHP搭配之最佳组合)_num_rows(query);来统计用户,代码如下:$user = MySQL(和PHP搭配之最佳组合)_num_rows($result);
    最后我们要关闭数据库。MySQL(和PHP搭配之最佳组合)_close();
    显示在线的人数。if($user == 1) {
    print("1 user online\n");
    } else {
    print("$user users online\n");
    }
    最终把上面代码写成一个PHP文件如下。<?php
    //Put your basic server info here
    $server = "localhost"; //normally localhost
    $db_user = "root"; //your MySQL(和PHP搭配之最佳组合) database username
    $db_pass = "password"; //your MySQL(和PHP搭配之最佳组合) database password
    $database = "users";
    $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
    // offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
    // $timeoutseconds seconds)
    //this is where PHP gets the time
    $timestamp = time();
    //counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
    $timeout = $timestamp-$timeoutseconds;
    //connect to database
    MySQL(和PHP搭配之最佳组合)_connect($server, $db_user);
    //add the timestamp from the user to the online list
    $insert = MySQL(和PHP搭配之最佳组合)_db_query($database, "INSERT INTO useronline VALUES
    ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
    if(!($insert)) {
    print "Useronline Insert Failed > ";
    }
    //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
    $delete = MySQL(和PHP搭配之最佳组合)_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
    if(!($delete)) {
    print "Useronline Delete Failed > ";
    }
    //select the amount of people online, all uniques, which are online on THIS page
    $result = MySQL(和PHP搭配之最佳组合)_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
    if(!($result)) {
    print "Useronline Select Error > ";
    }
    //Count the number of rows = the number of people online
    $user = MySQL(和PHP搭配之最佳组合)_num_rows($result);
    //spit out the results
    MySQL(和PHP搭配之最佳组合)_close();
    if($user == 1) {
    print("1 user online\n");
    } else {
    print("$user users online\n");
    }
    ?>
    2、PHP+MYSQL访问统计系统http://www.dai-ma.com/code/php/jishu/21049929700.html
    PHP+MYSQL访问统计系统功能包括:
    统计功能:综合统计,最近访问,年报表,月报表,周报表,日报表,历史报表,地区分析
    分析功能:地址分析,IP地址,链接页面,访问次数,操作系统,浏览器,屏幕大小
    维护功能:密码修改,本地区选择,IP刷新网页时间间隔设置,计数器位数设定,每页数据项数设定,统计重置功能
    直接down:
    http://www.dai-ma.com/code/php/jishu/21049929700.html