分类目录归档:SEO专栏

二十个你必须知道的SEO概念【转】

如果你拥有一个网站或独立博客,或者你的工作多少和互联网有关,那你一定耳濡目染多多少少对SEO(搜索引擎优化)有一定了解。本文将列举其中20个SEO领域最常用的名词和概念,如果你打算熟悉和了解他们请继续阅读。当然,如果你已经无所不晓,那你可以权当补习功课,或可以直接忽略本文。

1. 搜索引擎营销 (SEM)

搜索引擎营销(SEM)英文全称为Search Engine Marketing,意指通过搜索引擎进行服务和产品的营销。搜索引擎营销又主要分为两种:搜索引擎优化(SEO)和付费点击(PPC,Pay-Per-Click)。搜索引擎优化(SEO)指通过优化网站和页面并让它们在搜索结果的页面中展示,而付费点击(PPC)指通过购买搜索引擎的点击将用户带到自己的网站。(通常)这些点击来自搜索结果页面中的“赞助商链接”(译注:显然不适用于百度)。

2. 反向链接(Backlink)

反向链接(Backlink)又称为“回指链接”“入链”和“简易链接”,指从其他网站指向你的网站的一个超级链接。反向链接之所以对SEO异常重要,是因为它们直接影响一个网页的页面等级(PageRank),以及这个页面在搜索结果中的排名。

3. 页面等级(PageRank)

页面等级( PageRank) 是Goolgle用来评估一个页面相对于其他页面的重要性的一个算法规则。这个算法规则最基本的意思就是说,如果A页面有一个链接指向B页面,那就可以看作是A页面对B页面的一种信任或推荐。所以,如果一个页面的反向链接越多,再根据这些链接的价值加权越高,那搜索引擎就会判断这样的页面更为重要,页面等级(PageRank)也就越高。

4. 链接诱饵(饵链)(Linkbait)

链接诱饵(Linkbait),顾名思义这是一个网站或一个博客上为了尽可能多地吸引反向链接(目的是提高网站的PR值)而存在的一段内容。通常,这些做为诱饵的内容为文字内容,但也可以是一段视频、一张图片、一个测验或其他的热门的内容。最经典的诱饵内容的例子是“十大(Top 10)”,因为这样的内容在一些社交网站很容易流行起来成为热门话题(译注:这个话题貌似已经臭街了)。

5. 互链车间或互链作坊(Link farm)

互链工厂或互链作坊(Link farm)是指很多网站(通常数量很大)为了提高组成一个类似车间或作坊式的团体,通过彼此的互相链接来提高团体每一个的网站的页面评级的手段。早期,这种方法很有用,但现在已经成为一种不耻的作弊手段(并可能会收到惩罚)。

6. 锚文本(Anchor text)

锚文本(Anchor text)在反向链接中是指一个页面中可点击的文本,而其中的关键词对搜索引擎优化(SEO)有很大的帮助,因为Google会将这些关键词和你的内容关联起来。

7. 链接属性-NoFollow

Nofollow是网站管理员使用的一个链接属性,其目的是告诉搜索引擎他们并不是为该链接所指向的网站投票。这种链接也可能是网站用户自己创造的内容(比如博客评论中的链接),或者是一个付费交易的链接(比如广告或赞助商的链接)。当Google识别到这些反向链接的NoFollow属性后,基本就不会在页面评级和搜索结果排名的算法中将这些链接的贡献计算在内了。

8. 链接修饰(Link Sculpting)

链接修饰(Link Sculpting)是指网站管理员对网站上其他网站的反向链接进行属性设置。比如,管理员给链接添加Nofollow属性,这可以让管理员决定利用自己的网站为具体某个网站提高页面评级,或者不帮助具体某个网站提高网页评级。不过,现在这种做法的作用已经微乎其微,因为Google已经决定要用自己的算法来决定怎么处理链接的Nofollow属性。

9. 页面标题(Title Tag)

页面标题(Title Tag),顾名思义是指一个页面的标题中,这也是Google搜索算法中最重要的一个参考。理论上,你的页面标题要独一无二并尽可能多地包括页面内容中的关键词。你在浏览网页时可以从浏览器最上方看到一个网页的标题。

10. 元标签(Meta Tags)

元标签(Meta Tags)和页面标题一般,主要用于为搜索引擎提供更多关于你页面内容的信息。元标签位于HTML代码的头部,还有就是对长眼睛的访客是不可见的。

11. 搜索算法(Search Algorithm)

Google的搜索算法是为了给每一次搜索请求找到最为相关的网站和页面而设定。这个算法考量的因素超过200种(谷歌自称),其中包括页面等级、标题、元标签、网站内容,以及域名的年龄等。

12. 搜索结果页面(SERP)

搜索结果页面(SERP)的英文全称为Search Engine Results Page.基本上,这就是你平时在Google键入关键词回车后的页面了。你的网站从这个页面得到的流量取决于你的网站在搜索结果中的排名等级。

13. 沙盒(Sandbox)

Google除了所有网站的索引之外,还有一个单独的索引沙盒,那里面是新近发现和收录的网站。当你的网站存在这个沙盒之中时,它就不会在一般的搜索结果中出现,而只有当Google确认了你的网站是合法的,这才会将其从沙盒中移出进入所有网站的索引。

14. 关键词密度(Keyword Density)

如何判断一个特定页面的关键词密度?你只要将一个关键词使用的次数除以页面的总词数就可以了。关键词密度过去是搜索引擎优化中非常重要的一个因素,因为早期的搜索算法对此十分看重,但现在已经时过境迁了。

15.关键词堆积(Keyword Stuffing)

因为早期搜索算法对关键词密度非常看重,站长们便通过使用人工堆积关键词的手法来作弊和蒙骗搜索引擎。这种手法就叫做关键词堆积,当然现在已经没用了,而且你还可能会因此受到惩罚。

16. 障眼法(Cloaking)

障眼法(Cloaking)是指利用代码在同一个页面上让机器人和真人看到不一样的内容。其目的是为了让页面通过关键词而提升页面评级,而真正的目的是推销和出售各种不相关的产品或服务。当然,这也是一种作弊的手段,有很大可能会受到搜索引擎惩罚,甚至剔除。

17. 网络爬虫或网络蜘蛛(Web Crawler)

网络爬虫或网络蜘蛛(Web Crawler)也简称为爬虫或蜘蛛,代表搜索引擎在网路上进行浏览,目的是发现新的链接和页面,这是进行索引的第一个环节。

18. 复制内容(Duplicate Content)

复制内容(Duplicate Content)也叫“重复内容”,通常是指一个页面在引用了站内或站外的大段实质内容,或者是存在完全相同和极其相似的情况,而这也是一个网站应该尽量避免发生的情况,否则很容易让你的网站受到惩罚。

19. 标准链接(Canonical URL)

标准链接(Canonical URL)是指一个网页的链接要符合规范和标准。

20. 机器人协议(Robots.txt)

机器人协议(Robots.txt)不过是一个TXT文本文件,存在于你域名根目录之下,作用是将网站的目录结构信息告诉爬虫和蜘蛛,并限制其对特定文件夹和内容的访问,或者是完全将它们关在门外。

 

英文链接:20 SEO Terms You Should Know

中文译者:阿莫「一日一博,天天向上」

电子商务网站用户分析模型

当用户在电子商务网站上有了购买行为之后,就从潜在客户变成了网站的价值客户。电子商务网站一般都会将用户的交易信息,包括购买时间、购买商品、购买数量、支付金额等信息保存在自己的数据库里面,所以对于这些用户,我们可以基于网站的运营数据对他们的交易行为进行分析,以估计每位用户的价值,及针对每位用户的扩展营销(Lead Generation)的可能性。

评价用户价值的指标

对于评价指标的选择这里遵循3个原则:

1、指标可量化:没办法,要做定量分析,这个是最基本的前提;

2、尽可能全面:根据底层数据选择尽可能多的可以获取的指标,这样能够从多角度进行分析和评价;

3、线性独立:即指标间尽量保持不相关。比如如果选择用户的购买次数和总消费额,那么一定是购买次数越多的用户总消费额越高,也就是导致了评价维度上的重合,而选择购买次数和平均每次交易额可以避免这种相关性产生的弊端。

根据以上几个原则选取了以下几个指标(同样根据网站的特征选取合适的统计时间段):

1、最近购买时间:用户最近一次购买距当前的天数;

2、购买频率:用户在这段时间内购买的次数;

3、平均每次交易额:用户在这段时间内的消费总额/购买的次数;

4、单次最高交易额:用户在这段时间内购买的单词最高支付金额;

5、购买商品种类:用户在这段时间内购买的商品种类或商品大类。

用户评价模型的展示

一样的,也可以用雷达图进行展示,同样也使用离差标准化的方法对每个指标进行消除度量单位的10分制评分。下面是一个雷达图的示例:

雷达图

通过这个雷达图,我们可以读到比用户忠诚度更多的信息。图中的上面3个指标——最近购买时间、购买频率和购买商品种类可以用来评价用户的忠诚度,而下面的2个指标——平均每次交易额和单词最高交易额可以用来衡量用户的消费能力。如上图,用户1虽然购买频率和购买的广度不高,但其消费的能力较强,而用户2是频繁购买用户,对网站有一定的忠诚度,但其消费能力一般。所以图形的上半部分面积较大的用户拥有较高的忠诚度,而下半部分面积较大的用户具有更高的消费能力。这两类用户都是网站的有价值客户,但由于其类型的不同,在营销策略上可以分开对待。

用户交易行为分析的意义

1、发现网站的高价值客户(VIP),为客户关系管理(CRM)及保持有价值客户提供支持;

2、发掘网站的可发展用户,对于一些新客户或潜力客户进行针对性营销;

3、及时发现可能流失的客户,及时采取有效措施;

4、根据用户交易行为细分客户群,实施有针对性的营销策略。

PHP网站地图生成并自动提交的类

/**
 * @category   class
 * @package    SitemapGenerator
 * @author     Paweł Antczak

 * @translate  10V | www.smartwei.com
 * @copyright  2009 Paweł Antczak
 * @license    http://www.gnu.org/licenses/gpl.html  GPL V 2.0
 * @version    1.2.0
 * @see        http://www.sitemaps.org/protocol.php
 * @see        http://en.wikipedia.org/wiki/Sitemaps
 * @see        http://en.wikipedia.org/wiki/Sitemap_index
 */
class SitemapGenerator {
    /**
     * sitemap的名字
     * @var string
     * @access public
     */
    public $sitemapFileName = "sitemap.xml";
    /**
     * sitemap索引的名字
     * @var string
     * @access public
     */

    public $sitemapIndexFileName = "sitemap-index.xml";
    /**
     * robots文件的名字
     * @var string
     * @access public
     */
    public $robotsFileName = "robots.txt";
    /**
     * 每一个sitemap文件包含的连接数
     * 每个sitemap文件包含连接数最好不要 50,000.
     * sitemap文件的大小最好不要超过10MB,如果网站的链接很长的话,请减少页面包含链接数
     * @var int
     * @access public
     */
    public $maxURLsPerSitemap = 50000;
    /**
     * 如果该变量设置为true, 会生成两个sitemap文件,后缀名分别是.xml和.xml.gz 而且会被添加到robots.txt文件中.
     * 同时.gz文件会被提交给搜索引擎。
     * 如果每页包含的连接数大于50,000,则这个字段将被忽略,除了sitemap索引文件之外,其他sitemap文件都会被压缩
     * @var bool
     * @access public
     */
    public $createGZipFile = false;
    /**
     * 网站的url
     * 脚本向搜索引擎提交sitemap时会用到这个变量
     * @var string
     * @access private
     */
    private $baseURL;
    /**
     * 相关脚本的路径
     * 当你想把sitemap和robots文件放在不同的路径时,设置这个变量。
     * @var string
     * @access private
     */
    private $basePath;
    /**
     * 这个类的版本号
     * @var string
     * @access private
     */
    private $classVersion = "1.2.0";
    /**
     * 搜索引擎的URL
     * @var array of strings
     * @access private
     */
    private $searchEngines = array(
        array("http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=USERID&url=",
        "http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap="),
        "http://www.google.com/webmasters/tools/ping?sitemap=",
        "http://submissions.ask.com/ping?sitemap=",
        "http://www.bing.com/webmaster/ping.aspx?siteMap="
    );
    /**
     * url数组
     * @var array of strings
     * @access private
     */
    private $urls;
    /**
     * sitemap的数组
     * @var array of strings
     * @access private
     */

    private $sitemaps;
    /**
     * sitemap索引的数组
     * @var array of strings
     * @access private
     */

    private $sitemapIndex;
     /**
     * 当前sitemap的全路径
     * @var string
     * @access private
     */
    private $sitemapFullURL;

    /**
     * 构造函数
     * @param string $baseURL 你网站的URL, 以 / 结尾.
     * @param string|null $basePath sitemap和robots文件存储的相对路径.
     */
    public function __construct($baseURL, $basePath = "") {
        $this->baseURL = $baseURL;
        $this->basePath = $basePath;
    }
    /**
     * 使用这个方法可以同时添加多个url
     * 每个链接有4个参数可以设置
     * @param array of arrays of strings $urlsArray
     */
    public function addUrls($urlsArray) {
        if (!is_array($urlsArray))
            throw new InvalidArgumentException('参数$aURLs需要时数组');
        foreach ($urlsArray as $url) {
            $this->addUrl(isset ($url[0]) ? $url[0] : null,
                isset ($url[1]) ? $url[1] : null,
                isset ($url[2]) ? $url[2] : null,
                isset ($url[3]) ? $url[3] : null);
        }
    }
    /**
     * 使用这个方法每次添加一个连接到sitemap中
     * @param string $url URL
     * @param string $lastModified 当被修改时,使用ISO 8601
     * @param string $changeFrequency 搜索引擎抓取信息的频率
     * @param string $priority 你网站中连接的权重
     * @see http://en.wikipedia.org/wiki/ISO_8601
     * @see http://php.net/manual/en/function.date.php
     */
    public function addUrl($url, $lastModified = null, $changeFrequency = null, $priority = null) {
        if ($url == null)
            throw new InvalidArgumentException("URL 是必填项.");
        $urlLenght = extension_loaded('mbstring') ? mb_strlen($url) : strlen($url);
        if ($urlLenght > 2048)
            throw new InvalidArgumentException("URL的长度不能超过2048。
                                                请注意,见此url长度需要使用mb_string扩展.
                                                请确定你的服务器已经打开了这个模块");
        $tmp = array();
        $tmp['loc'] = $url;
        if (isset($lastModified)) $tmp['lastmod'] = $lastModified;
        if (isset($changeFrequency)) $tmp['changefreq'] = $changeFrequency;
        if (isset($priority)) $tmp['priority'] = $priority;
        $this->urls[] = $tmp;
    }
    /**
     * 在内存中创建sitemap.
     */
    public function createSitemap() {
        if (!isset($this->urls))
            throw new BadMethodCallException("请先加载addUrl或者addUrls方法.");
        if ($this->maxURLsPerSitemap > 50000)
            throw new InvalidArgumentException("每个sitemap中的链接不能超过50,000个");

        $generatorInfo = '<!-- generator="SimpleSitemapGenerator/'.$this->classVersion.'" -->
                          <!-- sitemap-generator-url="http://www.antczak.org"                           sitemap-generator-version="'.$this->classVersion.'" -->
                          <!-- generated-on="'.date('c').'" -->';
        $sitemapHeader = '<!--?xml version="1.0" encoding="UTF-8"?-->'.$generatorInfo.'

                         ';
        $sitemapIndexHeader = '<!--?xml version="1.0" encoding="UTF-8"?-->'.$generatorInfo.'

                              ';
        foreach(array_chunk($this->urls,$this->maxURLsPerSitemap) as $sitemap) {
            $xml = new SimpleXMLElement($sitemapHeader);
            foreach($sitemap as $url) {
                $row = $xml->addChild('url');
                $row->addChild('loc',htmlspecialchars($url['loc'],ENT_QUOTES,'UTF-8'));
                if (isset($url['lastmod'])) $row->addChild('lastmod', $url['lastmod']);
                if (isset($url['changefreq'])) $row->addChild('changefreq',$url['changefreq']);
                if (isset($url['priority'])) $row->addChild('priority',$url['priority']);
            }
            if (strlen($xml->asXML()) > 10485760)
                throw new LengthException("sitemap文件的大小不能超过10MB (10,485,760),
                    please decrease maxURLsPerSitemap variable.");
            $this->sitemaps[] = $xml->asXML();

        }
        if (sizeof($this->sitemaps) > 1000)
            throw new LengthException("sitemap索引文件最多可以包含1000条索引.");
        if (sizeof($this->sitemaps) > 1) {
            for($i=0; $isitemaps); $i++) {
                $this->sitemaps[$i] = array(
                    str_replace(".xml", ($i+1).".xml.gz", $this->sitemapFileName),
                    $this->sitemaps[$i]
                );
            }
            $xml = new SimpleXMLElement($sitemapIndexHeader);
            foreach($this->sitemaps as $sitemap) {
                $row = $xml->addChild('sitemap');
                $row->addChild('loc',$this->baseURL.htmlentities($sitemap[0]));
                $row->addChild('lastmod', date('c'));
            }
            $this->sitemapFullURL = $this->baseURL.$this->sitemapIndexFileName;
            $this->sitemapIndex = array(
                $this->sitemapIndexFileName,
                $xml->asXML());
        }
        else {
            if ($this->createGZipFile)
                $this->sitemapFullURL = $this->baseURL.$this->sitemapFileName.".gz";
            else
                $this->sitemapFullURL = $this->baseURL.$this->sitemapFileName;
            $this->sitemaps[0] = array(
                $this->sitemapFileName,
                $this->sitemaps[0]);
        }
    }
    /**
     * 如果你不想生成sitemap文件,指向用其中的内容,这个返回的数组就包含了对应的信息.
     * @return 字符串数组
     * @access public
     */
    public function toArray() {
        if (isset($this->sitemapIndex))
            return array_merge(array($this->sitemapIndex),$this->sitemaps);
        else
            return $this->sitemaps;
    }
    /**
     * 写sitemap文件
     * @access public
     */
    public function writeSitemap() {
        if (!isset($this->sitemaps))
            throw new BadMethodCallException("请先加载createSitemap方法.");
        if (isset($this->sitemapIndex)) {
            $this->_writeFile($this->sitemapIndex[1], $this->basePath, $this->sitemapIndex[0]);
            foreach($this->sitemaps as $sitemap) {
                $this->_writeGZipFile($sitemap[1], $this->basePath, $sitemap[0]);
            }
        }
        else {
            $this->_writeFile($this->sitemaps[0][1], $this->basePath, $this->sitemaps[0][0]);
            if ($this->createGZipFile)
                $this->_writeGZipFile($this->sitemaps[0][1], $this->basePath, $this->sitemaps[0][0].".gz");
        }
    }
    /**
     * 如果robots.txt文件存在,更新该文件,将新添加的信息写入其中
     * 如果robots.txt文件不存在,则创建该文件,写入刚添加的信息
     * @access public
     */
    public function updateRobots() {
        if (!isset($this->sitemaps))
            throw new BadMethodCallException("请先加载createSitemap方法");
        $sampleRobotsFile = "User-agent: *\nAllow: /";
        if (file_exists($this->basePath.$this->robotsFileName)) {
            $robotsFile = explode("\n", file_get_contents($this->basePath.$this->robotsFileName));
            $robotsFileContent = "";
            foreach($robotsFile as $key=>$value) {
                if(substr($value, 0, <img class="wp-smiley" src="http://www.smartwei.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" /> == 'Sitemap:') unset($robotsFile[$key]);
                else $robotsFileContent .= $value."\n";
            }
            $robotsFileContent .= "Sitemap: $this->sitemapFullURL";
            if ($this->createGZipFile && !isset($this->sitemapIndex))
                $robotsFileContent .= "\nSitemap: ".$this->sitemapFullURL.".gz";
            file_put_contents($this->basePath.$this->robotsFileName,$robotsFileContent);
        }
        else {
            $sampleRobotsFile = $sampleRobotsFile."\n\nSitemap: ".$this->sitemapFullURL;
            if ($this->createGZipFile && !isset($this->sitemapIndex))
                $sampleRobotsFile .= "\nSitemap: ".$this->sitemapFullURL.".gz";
            file_put_contents($this->basePath.$this->robotsFileName, $sampleRobotsFile);
        }
    }
    /**
     * 将新生成的sitemap提交给搜索引擎,包括:Google, Ask, Bing and Yahoo。
     * 如果你没有填写yahooid,yahoo也会被通知。
     * 但是每天最多提交一次,重复提交yahoo会拒绝接受信息
     * @param string $yahooAppId 你网站的Yahoo Id
     * @return 以数组形式返回每个搜索引擎的消息
     * @access public
     */
    public function submitSitemap($yahooAppId = null) {
        if (!isset($this->sitemaps))
            throw new BadMethodCallException("To submit sitemap, call createSitemap function first.");
        if (!extension_loaded('curl'))
            throw new BadMethodCallException("cURL library is needed to do submission.");
        $searchEngines = $this->searchEngines;
        $searchEngines[0] = isset($yahooAppId) ? str_replace("USERID", $yahooAppId, $searchEngines[0][0]) : $searchEngines[0][1];
        $result = array();
        for($i=0;$isitemapFullURL,ENT_QUOTES,'UTF-8'));
            curl_setopt($submitSite, CURLOPT_RETURNTRANSFER, true);
            $responseContent = curl_exec($submitSite);
            $response = curl_getinfo($submitSite);
            $submitSiteShort = array_reverse(explode(".",parse_url($searchEngines[$i], PHP_URL_HOST)));
            $result[] = array("site"=>$submitSiteShort[1].".".$submitSiteShort[0],
                "fullsite"=>$searchEngines[$i].htmlspecialchars($this->sitemapFullURL, ENT_QUOTES,'UTF-8'),
                "http_code"=>$response['http_code'],
                "message"=>str_replace("\n", " ", strip_tags($responseContent)));
        }
        return $result;
    }
    /**
     * 保存文件
     * @param string $content
     * @param string $filePath
     * @param string $fileName
     * @return bool
     * @access private
     */
    private function _writeFile($content, $filePath, $fileName) {
        $file = fopen($filePath.$fileName, 'w');
        fwrite($file, $content);
        return fclose($file);
    }
    /**
     * 保存 GZipped文件.
     * @param string $content
     * @param string $filePath
     * @param string $fileName
     * @return bool
     * @access private
     */
    private function _writeGZipFile($content, $filePath, $fileName) {
        $file = gzopen($filePath.$fileName, 'w');
        gzwrite($file, $content);
        return gzclose($file);
    }
}

继续阅读

SQL的优化和注意事项(转)

现在我们假设我们只有一台MySQL服务器,所有的select/update/insert/delete操作都是在这上面进行的,我们同时有三台Web服务器,通过DNS轮巡来访问,那么我们如何进行我们应用程序和SQL的优化。

1. Where条件
在查询中,WHERE条件也是一个比较重要的因素,尽量少并且是合理的where条件是很重要的,在写每一个where条件的时候都要仔细考虑,尽量在多个条件的时候,把会提取尽量少数据量的条件放在前面,这样就会减少后一个where条件的查询时间
有时候一些where条件会导致索引无效,当使用了Mysql函数的时候,索引将无效,比如:select * from tbl1 where left(name, 4) = ‘hylr’,那么这时候索引无效,还有就是使用LIKE进行搜索匹配的时候,这样的语句索引是无效的:select * from tbl1 where name like ‘%xxx%’,但是这样索引是有效的:select * from tbl1 where name like ‘xxx%’,所以谨慎的写你的SQL是很重要的。

2. 关联查询和子查询
数据库一个很重要的特点是关联查询,LEFT JOIN 和全关联,特别是多个表进行关联,因为每个关联表查询的时候,进行扫描的时候都是一个笛卡尔乘积的数量级,扫描数量很大,如果确实是需要进行关联操作,请给where或者on的条件进行索引。
关联操作也是可能交给应用去操作的,看数据量的大小,如果数据量不是非常大,比如10万条以下,那么就可以交给程序去处理,程序分别提取左右两个表的数据,然后进行循环的扫描处理,返回结果,这个过程同样非常耗费Web服务器的资源,那么就需要取决于你愿意把压力放在Web服务器上或者数据库服务器上了。
子查询是在mysql5中支持的功能,比如:select * from tbl1 where id in(select id from tbl1),那样效率是非常非常低,要尽量避免使用子查询,要是我,绝对不用,呵呵。

3.  一些耗费时间和资源的操作
SQL语句中一些浪费的操作,比如 DISTINCT、COUNT、GROUP BY、各种MySQL函数。这些操作都是比较耗资源的,我想应用最多的是count字句吧,如果使用count,尽量不要count(*),最好 count一个字段,比如count(id),或者count(1),同样能够起到统计的作用。如果不是十分必要,尽量不要使用distinct操作,就是提取唯一值,你完全可以把这个操作交给脚本程序去执行提取唯一值,减少MySQL的负担。group by 操作也是,确实需要分组的话,请谨慎的操作,如果是小批量的数据,可以考虑交给脚本程序去做。
至于MySQL的函数,估计很多常用,比如有人喜欢把截取字符串也交给MySQL去操作,或者时间转换操作,使用比较多的函数像 SUBSTR(), CONCAT(), DATE_FORMAT(), TO_DAYS(), MAX(), MIN(), MD5() 等等,这些操作完全可以交给脚本程序去做,减轻MySQL的负担。

4. 合理的建立索引
索引的提升速度的一个非常重要的手段,索引在对一些经常进行select操作,并且值比较唯一的字段是相当有效的,比如主键的id字段,唯一的名字name字段等等。
但是索引对于唯一值比较少的字段,比如性别gender字段,寥寥无几的类别字段等,意义不大,因为性别是50%的几率,索引几乎没有意义。对于 update/delete/insert非常频繁的表,建立索引要慎重考虑,因为这些频繁的操作同样对于索引的维护工作量也是很大的,最后反而得不偿失,这个需要自己仔细考虑。索引同样不是越多越好,适当的索引会起到很关键的作用,不适当的索引,反而减低效率维护,增加维护索引的负担。

5. 监控sql执行效率
在select语句前面使用EXPLAIN字句能够查看当前这个select字句的执行情况,包括使用了什么操作、返回多少几率、对索引的使用情况如何等等,能够有效分析SQL语句的执行效率和合理程度。
另外使用MySQL中本身的慢查询日志:slow-log,同样能够记录查询中花费时间比较多的SQL语句,好对相应的语句进行优化和改写。
另外在MySQL终端下,使用show processlist命令能够有效的查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看SQL执行情况,同时对一些锁表操作进行优化。

原文地址:http://www.lamp4business.com/index.php/archives/119

优化一个网站的过程(转)

 

1.行业分析,关键词提取。
(1)竞争对手参考。
(2)用户行为分析。
(3)相关关键词工具分析。
2.关键词部署。
(1)URL中。通过重写。
(2)TITLE ,keywords ,description,网页内容部署。
(3)域名相关性。
(4)内容相关性及交叉连接
3.快速被搜索引擎索引

(1)制作站点XML文件。站点地图方便被搜索引擎索引。

(2)制作robots文件。控制搜索引擎抓取。

(3)通过外链手法。
4.关键词推广。
(1)社会化推广。
(2)链接建设。

来源:http://www.lamp4business.com/index.php/archives/106