按QQ查询QQ群数据库的方法

1.为所有的表创建索引

    ADD INDEX `QunNum_index` (`QunNum`);
    ADD INDEX `QQNum_index` (`QQNum`)  ;

2.创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `SearchByQQ`(IN `qq` int)
BEGIN
    DECLARE i int;
    DECLARE tblname VARCHAR(10);    
    DECLARE sql_text VARCHAR(1000);

    DROP TABLE IF EXISTS `temp`;
    CREATE TABLE `temp`(QQNum int,nick varchar(100),QunNum int) ENGINE=MEMORY;
    SET i=1;
        WHILE i<1100 DO
        SET tblname=CONCAT('group',i);
        SET sql_text=concat('insert into `temp` select QQNum,nick,QunNum from ' , tblname , ' where QQNum=' , qq , ';');
        SET @sql_text=sql_text;

        PREPARE stmt FROM @sql_text;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET i=i+1;
    END WHILE;
    SELECT * FROM `temp`;
END

3.编写PHP

赶时间,瞎写的。

set_time_limit(60);
?>



   QQGroup Search System v1<span class="hljs-number">.0</span>
   "UTF-8">
   "viewport" content="width=device-with,initial-scal=1">
   "bootstrap.min.css" rel="stylesheet">


'width:75%;margin:0 auto;'>
class="form-inline" role="form" action="" method="get" style="margin-bottom:10px;"> <div class="form-group"> <input type="input" class="form-control" name="qun" id="qun" placeholder="请输入QQ群号码" value=""> <input name="sbmt" type="submit" class="btn btn-primary"> div> form> php if(intval($_GET['qun'])>100000) { @mysql_connect("localhost", "root", "123456"); @mysql_select_db("QQGroupInfo"); mysql_query("set names utf8"); $qun=intval($_GET['qun']); $sql="select * from QQGroupInfo.qunlist".CEIL($qun/1000000)." where QunNum=$qun"; $rs=mysql_query($sql) or die(mysql_error()); $r=mysql_fetch_assoc($rs); if($r) { echo ""; echo""; while($r=mysql_fetch_assoc($rs)) { $i++; echo""; if($i%10==0) echo"\r\n\t"; } echo"\t\r\n
QQ群号:{$r['QunNum']}
\r\n"; echo "QQ名称:{$r['Title']}
\r\n"
; echo "QQ简介:{$r['QunText']}
\r\n"
; $sql="select * from QQGroupDetail.group".CEIL($qun/100000)." where QunNum=$qun"; $rs=mysql_query($sql) or die(mysql_error()); echo "群 人 数:".mysql_num_rows($rs); echo "
{$r['QQNum']}
{$r['Nick']}
"
; } } elseif(intval($_GET['qq'])>10000) { define('CLIENT_MULTI_RESULTS', 131072);//这两行是使用存储过程的关键地方 @mysql_connect("localhost", "root", "123456",true,CLIENT_MULTI_RESULTS); @mysql_select_db("QQGroupDetail"); //数据库库名名 mysql_query("set names utf8"); $qq=intval($_GET['qq']); $rs=mysql_query("call SearchByQQ($qq);") or die(mysql_error()); echo ""; echo""; while($r=mysql_fetch_assoc($rs)) { echo""; } echo"
QQ号码昵称群号码
{$r['QQNum']}{$r['nick']}{$r['QunNum']}
"
; } ?>

4.总结

在VPS上,在1100个表上查找QQ加入的QQ,大约需要20s,如果是SSD应该在几秒内。
尝试使用Sphinx全文索引,发现需要50多G……放弃了。
还有一种方法,空间换效率,提前把每个QQ号加入的群查出来放到一个表里。

你可能感兴趣的:(PHP,SQL)