比如,上一篇,下一篇的功能 $prevquery = $_G['db']->query("SELECT id,title,alias,url FROM ".tname('article')." WHERE {$cidwhere} (sortid>'{$article['sortid']}' OR (sortid='{$article['sortid']}' AND id>'{$article['id']}')) AND status='1' AND ischeck='1' ORDER BY sortid ASC LIMIT 1"); $nextquery = $_G['db']->query("SELECT id,title,alias,url FROM ".tname('article')." WHERE {$cidwhere} (sortid<'{$article['sortid']}' OR (sortid='{$article['sortid']}' AND id<'{$article['id']}')) AND status='1' AND ischeck='1' ORDER BY sortid DESC LIMIT 1");访问两端的文章比较快,如果访问中间的文章,则超时,问题语句在上一篇的那个ASC 上
还有,后台管理的分页,由于MYSQL自身的LIMIT的特性,偏移量越大,选取越多,每页10条,1000页以后基本上无法访问, 只能用这种语句, $query = $_G['db']->query('SELECT id FROM '.tname('article')." ORDER BY id DESC LIMIT $start,1"); $value = $_G['db']->fetch_array($query); $query = $_G['db']->query('SELECT id,uid,username,cids,title,alias,url,sortid,iscommend,viewnum,commentnum,status,ischeck,dateline FROM '.tname('article')." WHERE (id<'{$value['id']}') ORDER BY id DESC LIMIT $pagesize");这样就不能查看排序的效果了,比如进后台想查看所有已经发布的,按评论排序,按排序值排序,按查看次数排序==
$nextquery = $_G['db']->query("SELECT id,title,alias,url FROM ".tname('article')." WHERE {$cidwhere} (sortid<'{$article['sortid']}' OR (sortid='{$article['sortid']}' AND id<'{$article['id']}')) AND status='1' AND ischeck='1' ORDER BY sortid DESC LIMIT 1");访问两端的文章比较快,如果访问中间的文章,则超时,问题语句在上一篇的那个ASC 上
文章ID不是已知的么?比如现在查看的文章ID是100,那么下一篇就是ID=101,上一篇就是ID=99,为什么要用这样的ORDER BY,再LIMIT 1呢?
只能用这种语句, $query = $_G['db']->query('SELECT id FROM '.tname('article')." ORDER BY id DESC LIMIT $start,1");
$value = $_G['db']->fetch_array($query);
$query = $_G['db']->query('SELECT id,uid,username,cids,title,alias,url,sortid,iscommend,viewnum,commentnum,status,ischeck,dateline FROM '.tname('article')." WHERE (id<'{$value['id']}') ORDER BY id DESC LIMIT $pagesize");这样就不能查看排序的效果了,比如进后台想查看所有已经发布的,按评论排序,按排序值排序,按查看次数排序==
limit 5,11 5----11
查找 某个作者 已经发布且通过审核的文章 -------首先按7楼说的对表分区,然后在作者id或用户名上加索引即可,
然后把查询变成 查找 某个作者 ,某个时段 已经发布且通过审核的文章,查询时有了这两个索引的筛选,剩下的已经没有多少条数据了,可以去除掉这个索引了 KEY `status_index` (`status`,`ischeck`,`sortid`), -------当然这只是我的看法。查找某个分类--------可以先查出来放入临时表,或者另一个表,或者某缓存。然后定期清理更新这个表。