淘宝开店步骤&淘宝API——TOP

弄好了miyifun.com,想同时在淘宝开个店,

呵呵,咱们是程序员嘛,是吧,听说淘宝有个开放的API,叫做TOP。

等哥研究研究,做个淘宝客,同时也推广一下,

先看看在淘宝开店的步骤吧:[break]

1、登陆淘宝网注册,填写帐号--设置密码--设置邮箱(这个就是支付宝帐户)

2、登陆邮箱--激活--支付宝激活成功

3、认证身份证:登陆淘宝网--点击顶部<我要卖>--提示认证--输入相关信息--上传身份证扫描件(身份证到照相馆扫描双面,U盘拷贝回来即可)--三个工作日认证成功

4、认证银行卡:

1 、用您的支付宝帐户登陆支付宝主页并选择进入“我的支付宝”;

2 、进入“我的支付宝”后选择“帐户管理信息”; 

3 、进入“帐户管理信息”后选择“银行帐号管理”; 

4 、进入“银行帐号管理”后准确填写表格,完成后点击“立即保存”;

5 、支付宝将告知您的帐户信息已经保存,银行帐号绑定完成!

6、三天内到银行查看支付宝汇款,如果看到类似0.05元这样的就是了

7、登陆淘宝网-支付宝-认证-输入数字0.05

8、登陆您的支付宝邮箱-点击激活-系统自动返回支付宝页面-成功激活!

  全部完成,上架宝贝:

  登陆淘宝网--我要卖--输入宝贝昵称--输入销售方式<一口价>--输入价格--输入运输方式--宝贝详细描述--输入数量--选择7天自动上架--提交

 

  连续上架10件宝贝--到我的淘宝--左侧<店铺管理>--创建店铺名称--写一下公告--确定--您的网店正式开张!

  买家拍下您的宝贝--显示蓝色的<发货>--您点击<详细>--按照地址给买家发货--买家签收后--确认--付款到您帐户--您评价买家--买家评价您--完成交易!

  开店后,如何宣传网店很重要:

  很多人在网上都有了自己的店面,可是不管如何价廉物美都有可能被吞噬在数量众多的网店中。假如你不宣传,永远没有人知道你网店的存在。不管你是中小企业还是一个小商人,甚至是Soho一族,你都必须要宣传、宣传、再宣传!

坛子里“泡”出的买家

  利用别人的人气宣传自己的网店,这样的免费方式当然是你的首选。我们可以经常去一些人气旺的论坛、聊天室、社区、留言簿等,在你的签名档或名字中加入你的网站名,特别是签名档要做得精致漂亮些,别人在看你的帖子时会注意到有特色的签名档图片广告和文字说明,这是非常有效的方法。比如淘宝社区是个人气很旺的互动地带,这里有不少潜在的买家,选个有特色的头像,经常在社区里写一些淘宝经验、教训和感想等,如果文笔流畅、思路清晰有价值的帖子就更好,别人在看你的帖子同时通过你的签名档链接很容易就会访问你的网店。还可以根据你销售的商品,多去相关人气旺的论坛,一定会收获不少。

双赢模式的店铺链接

  淘宝网中最多可添加35个友情链接,与人气较旺的店铺进行链接交换,可以大大增加大家的网站流量。 做链接也要讲技巧的,比如应该尽量找购买群体相同的店铺,如果你是卖年轻人的东西,他卖老年人的东西,这样的链接可能意义不大。尽量找同行但不同类的商品,比如都是卖饰品的,我专卖东方饰品,他专卖欧美饰品。同时,要特别注意你的链接伙伴是否有诚信,它将直接影响到你的声誉。

有效的邮件推广

  这是一种比较老式的推广方面,但必须承认它的有效性,因此现在仍然为网店的店家宣传推广的一个利器。利用邮件群发工具和电子邮件列表。发送电子邮件。但一定注意不要发送垃圾邮件。而且发送也很有技巧的,比如可以“装成”知识介绍性的邮件,定期发一些介绍与商品相关的知识、技巧等,不至于被接收方设置为垃圾邮件;不要发的太频繁;在特殊的日子里发(根据你的商品,如情侣类的商品,在七夕节和情人节前发)等,总之一定要根据实际情况,不要让接收方反感,否则适得其反。

不可忽视的搜索贴吧

  我们知道搜索引擎是网站推广最好的方式 ,然而一般排名前30位的搜索结果才有人去看。 如果你的店铺总是出现在搜索结果的50位以后,几乎没有人去访问。要想排名朝前现在一般都需要花一定费用,找专门的网站推广公司了。但大家都忽视了各个搜索引擎提供的贴吧,如百度、雅虎等都提供了此类功能,先在搜索引擎中查找与你销售的商品关联度较高的关键词,再利用这个关键词创建贴吧(当然不要只创建一个,隔一段时间或在不同的贴吧创建)。 要特别注意一个小技巧,就是百度贴吧中可以贴图,你可以在发言时每次都贴一张图,当然,不用说你也知道是个类似签名档的宣传网让的精美图片,使访问者在看帖时单击图片进入网店

做好淘宝有几个障碍是必须越过的,一,信誉;二,货源;三专业技术支持;四,眼光;五资金;凡此种种!

开好淘宝网店,首先,信誉问题很重要。

现在淘宝网店的信誉高低已经成为购物基本标准之一了,据说淘宝购物的标准顺序如下,价格->信誉->宝贝->服务。呵呵,似乎有些本末倒置了。不过事实如此,仔细想想也对。网络购物的最大特点就是,比价快捷,只要一搜索同类产品几乎全部出来,所以价格首当其冲;又由于网络购物毕竟不是面对面沟通,因此信誉至关重要,为什么相信你?凭什么相信你?除了销售客服的专业水平外,就是信誉,除了只觉之外就是信誉。

信誉,只能靠慢慢做出来,也只有慢慢做的过程中你太能真切的理解买家的心理,发现自己的弱点,熟练自己的操作,这一切的一切对新的掌柜们都是祢足珍贵的,这一切的一切靠的就是耐性,靠的就是恒心!不要太担心,面包会有的,啤酒会有的,信誉也会有的!心如在,梦就在!

当然,我个人认为想快速提高信誉还是有些技巧的。

 

首先,注意你的宝贝上传时间,选择人流最多的时间做上传,这样能快速提高你的浏览量,一定程度上流量就是销量,销量是流量的N%而已。如何选择人流最多的时候呢?据统计,早上十点达到第一个高峰,30%多的人会在此时上网,下午三点会达到第二个高峰,40%的人会选择此时上网,晚上九点会达到全天最高峰,60%多的人会在此时上网!何时上传宝贝,不言自明!

 

其次,做好你的定价

 

曾经听过这样一段对话:

 

掌柜甲:有什么办法快速提高信誉吗?

掌柜乙:足够低的价格。

掌柜甲:怎样才能做到足够低的价格?

掌柜乙:大批量进货,降低成本。

掌柜甲:大批量进货?卖不掉怎么办?

掌柜乙:只要信誉足够高,不会卖不掉。

掌柜甲:.........

由此可见,价格,信誉,又是一个鸡生蛋,蛋生鸡的问题。

的确价格对提高信誉至关重要,低价赚心意,赔钱赚吆喝,这淘宝上是符合规则的,在此,给诸位掌柜一个建议,千万不要大量压货,否则后患无穷(这是我多年销售经验,见过各种代理商兴衰的看法),除非你资金相当雄厚。由此,亏本赚信誉是可行的,比如一件进价30的牛仔裤,通常掌柜们会定价35-40之间,此时,你定价20-25,价格冲击可想而见,250笔亏掉1250,让你一两个月冲钻,比起耗上好几个月是否更划算。这种方式关键是要选择好产品,以及价格区间,掌柜们自己应该有数。此其一!

 

其二,定价要有策略,诸如,10,20,30等整数关口是一定要有产品的,因为部分买家在搜索宝贝是会设置价格区间,通常是整数关口,这样你的宝贝才会跳到前面。另外,规划是要明确促销品,利润品,促销品的绝对低价带动人气,从而带动利润品销售,这样起码你不会纯亏。

 

其三,拍卖,是带动人气不错的选择,发布一些拍卖品将给你带来意外收获。

其四,做一些促销活动,特别是新开店,要想让别人对你的店感兴趣,做些促销活动是不可或缺的,促销形式要根据自己店铺的具体情况而定,总体原则是要有惊爆的感觉!

其五,就是仔细对待每个交易,在交易过程中,注意细节,比如发货后主动告诉买家什么时候估计能到,现在已经到哪里了,要经常跟踪,对方拿道货后也要主动问问,有没有什么不满意,不要怕出问题,有问题是一定要去解决的,哪怕亏点也是无所谓的,在别人给好评后也要做好解释回评,以增进交流。总之,不要以为交易完了就没有事了!

接下来,说说货源问题吧!

 

新开店的掌柜们,几乎把所有的精力都放在了信誉上面,我认为是走入了误区。信誉,是非常重要,但并非根本。信誉随着时间的推移,随着你想方设法去努力,终归是有的。我认为货源才是根本。有了好的货源,不仅能一定程度上解决信誉问题,还能让你的店持续发展。

货源,之所以还没有让新掌柜们放在第一位,那是因为这个问题看似很容易解决,去批发市场拿拿货就行了,起码刚开始时是这样,对于这个问题,我在没做之前就想得相当多了,我始终认为它才是重中之重,根本的根本。没有好的货源想跟别的店抗衡只有死路一条。比如说你拿的宝贝15,你为了薄利多销,定16,17吧,够低了,但别人可以定14,因为她拿的是12。不要不信,这都是事实! 淘巧网好,好淘巧网

那么我个人认为,货源要注意哪些方面呢!

你要是去问别人,最多的答复,肯定是让你找有创意的,别人没做过的,或者没想到的,不错,完全正确,太完美了!只可惜,没有几个人能做到。

上面是在淘宝开店的步骤,

下面我们看看TOP:

http://open.taobao.com/  主要是从这个地方取得的信息,

http://wiki.open.taobao.com/index.php/PHP示例代码

http://isv.alisoft.com/isv/html/showhtml.jspa?html=/html/taobao/taobaoPubAccount.html  淘宝API公用测试账号

等有时间再研究吧~ 


smarteng 发布于 2010-5-29 01:56

服务器优化小记--Etag和Expires

服务器的优化包含了方方面面,不过还是有章可循的,先看看数据库,再看看代码,再优化服务器,最后看看页面结构,经过一番努力,完成了美衣坊 的修改,程序基本修改完毕(只剩下SQL查询的优化了,这个慢慢explain吧),学了 一些优化的手段,见下文~ 


smarteng 发布于 2010-5-25 05:23

最近用到的命令

svn更新步骤:

192.168.24.67上      svn ci -m "修改qa后台显示不正常" newthread.inc.php

192.168.148.217上   svn up newthread.inc.php

svn st -u  //查看svn的状况

svn up

 

$ svn log threadnew.htm

$ svn...


smarteng 发布于 2010-5-25 04:51

开心一刻

1.一天,牛给驴出了一个难题,问“蠢”字下面两只虫子哪只是公的,哪只是母的。驴绞尽脑汁,还是答不上来。牛骂道:真是头蠢驴,男左女右嘛!
2. 毕业后七年,总算接了个大工程,造一根三十米烟囱,工期两个月,造价三十万,不过要垫资。总算在去年年底搞完了。今天人家去验收,被人骂得要死,还没有钱 拿。妈的!图纸看反了,人家是要挖一口井![break]
3.一醉汉不慎从三楼掉下,引来路人围观,一警察过来:发生什么事?醉汉:不清楚,我也是刚到。
4. 医生问病人是怎么骨折的。病人说,我觉得鞋里有沙子,就扶着电线杆抖鞋。TMD有个混蛋经过那里,以为我触电了,便抄起木棍给了我两棍子!
5. 某曰,龟爸、龟妈及龟儿子一家决定去郊游,他们带了一个山东大饼和两罐海
底鸡,便出发到阳明山去了。苦爬十年,终于到了!他们席地而坐,卸下装 备准
备吃饭。结果,却发现没带开罐器!
龟儿子:“……那我回去拿好了。」
龟 爸:“乖儿子!快!爸妈等你回来一起开饭,快去快 回!”
龟儿子:“一定要等我回来!不可食言喔!”
于是龟儿子踏上归途………
光阴似箭,岁月如梭,转眼间已过了20年,龟儿子却尚 未出现。
龟 妈:“老伴……要先开饭不?我超饿说……”
龟 爸:“不行!我们答应儿子的!嗯……再等他五年,不来就不管他了!”
转 眼就是五年,龟儿子仍未见踪迹。龟龟爸妈不管了!二老决定开动。
拿出大饼正准备开吃……
突然,龟儿子从树后探出头来……
龟儿子: “靠!我就知道你们会偷吃!骗我回去拿开罐器?我等了二十五年,终
于被我等到了吧!我最恨人家骗我了!
6. 小鑫:爸爸,为什么我的名字里面三个金呢?
爸爸:你命里缺金,所以取名叫鑫,就像有些人命里缺水,就取名叫淼,还有些人命里缺木就叫森。
小 鑫:爸爸,您说那郭晶晶姐姐命里缺什么呢?
7. 一对男女朋友坐在公园的长椅上谈恋爱,女突然想放屁。
 对男的说:我学部谷鸟叫,你听象 不像。
 男果然愿听。
 于是,女在“布谷布谷”的鸟叫声的掩护下爽快地放了一个响屁。
 女:象不像不谷鸟叫?
 男:屁声 太大,没听清!
8. 乌龟受伤.让蜗牛去买药。过了2个小时.蜗牛还没回来。乌龟急了骂道:他妈的再不回来老子就死了!这时门外传来了蜗牛的声音:你他妈再说老子不去了!
9. 某人养一猪,烦,弃之,然猪知归路,数弃无功。一日,其驾车转了很多弯弃猪,深夜致电家人,问:“猪归否?”答曰:“已归!”其怒吼:“让它接电话,老子 迷路了!" 
10. 大象不小心踩到蚂蚁窝,蚂蚁们倾巢而出,纷纷爬到大象身上。大象抖抖身子,蚂蚁们都掉了下来。此时还有一只在大象的脖子上,掉下的蚂蚁大声叫到“掐死 它”。
11. 一日上电脑课,有一排同学的电脑死机了。于是一位同学站起来说:“老师,电脑死机了,我们这排全死了。”这时,许多同学都说:“我们也死了。”这时老师 问:“还有谁没死?”只有一位同学站起来:“我还没死!”老师奇怪的说:“全班都死了,你为什么不死?”
12.一猴子吃花生前都要先塞进屁股再拿 出来吃。对此管理员解释道:曾有人喂它桃子,结果桃核拉不出来,猴子吓怕了,现在一定要量好再吃。
13.小明:“爸爸,我是不是傻孩子啊?”
爸 爸:“傻孩子,你怎么会是傻孩子呢……”
14. 讲个故事:“从前有个太监…………………………”
有人耐不住问:“下面呢?”
继续讲故事:“下面?没了啊……”
15. 有个人刚学外语,这天在街上走,不小心踩了一个老外的脚,那人急忙说:“I'm sorry.”老外也礼貌的说了句:“I'm sorry too.”那人一听,急忙说了句:“I'm sorry three.”老外一听傻了,问:“What are you sorry for?”那人无奈的说:“I'm sorry five.”
16. 唐僧写给孙悟空的一封信 
亲爱的悟空: 
我这封信写得很慢,因为我知道你看字不快! 
我们这个礼拜下了2次雨,第一次下了4天第二次下了3天! 
你在花果山过得好吗?我在天庭过得很不好,由于没有地心引力,所以大便、尿、眼泪和鼻涕都掉不下来,你说苦不? 
我们这里的牛肉面很好吃,改天你来了我们一起到西街的餐厅去吃火锅! 
你的观音大姐要生了,因为不知道生男的还是女的,所以暂时不知道你要当舅舅还是阿姨! 
我寄给你的衣服你收到了吗?要去寄的时候我怕超重,所以把扣子剪下来放在衣服的口袋里! 
不早了就写到这里了,有空到我这里玩,记得不要多喝水,不然到了这里尿不出来很难受的! 
P。S 本来想给你寄钱的,可是信封已经粘上了!

17. 一个消化不良的病人向医生抱怨:我近来很不正常,吃什么拉什么,吃黄瓜拉黄瓜,吃西瓜拉西瓜,怎样才能恢复正常呢?医生沉默片刻,那你只能吃屎了。
18. 某人去上海出差在街上丢了一块钱,民警说:“我们一定帮您找到”一月后那人再去,他丢钱的大街因修路都被挖了开来,他不禁叹“上海的就是实在”
19. 有一天一个蚂蚁正在晒太阳,突然看见大象慢悠悠的 走来 ,忙起身伸直前腿,旁边的兔子忙问你在干吗呢? 蚂蚁说:“嘘~~~~~~~ 小声点 看我拌他一脚”
20.蚯蚓一家这天很无聊,小蚯蚓就把自己切成两段打羽毛球去了,蚯蚓妈妈觉得这方法不错,就把自己切成四段打麻将去了,蚯蚓爸爸 想了想,就把自己切成了肉末。蚯蚓妈妈哭着说:"你怎么这么傻?切这么碎会死的!"蚯蚓爸爸弱弱地说:"……突然想踢足球
21.龟兔赛跑...兔 子很快跑到前面去了 ..乌龟看到一只蜗牛爬得很慢很慢 ..对他说: 你上来,我背你吧..然后 .. 蜗牛就上来了 ..过了一会 ..乌龟又看到一只蚂蚁.. 对他说:你也上来吧 ..于是蚂蚁也上来了。.蚂蚁上来以后..看到上面的蜗牛 .. 对他说了句"你好"你们知道蜗牛说什么吗 ??蜗牛说 :你抓紧点 ,这乌龟好快 ..
22. 有一天,一家失火了,爸爸妈妈都逃出来了,只剩下一个儿子还在里面。妈妈很紧张的在屋外大喊:"儿子阿.....你在干麻 ......都失火了还不出来 ...."儿子回答 :"我在穿袜子阿....."妈妈又说,"都失火了还穿什么袜子...."过了五分钟,儿子还没出来......妈妈又紧张的喊,"儿子阿,你到底在干什 么?快出来 ~ 都失火了,还待在里面....."儿子说,"我在脱袜子阿........
23. 有个人到河边钓鱼先穿了个树叶~半天没鱼上钩,他又换了块面包~一样半天没鱼上钩~没办法他只好去换蚯蚓~一样还是半天没鱼上钩~~他气愤之下~掏出 100rmb 摔入水中大骂:"*—# 要吃什么!自己去买!!!
24. 同桌感冒流鼻涕,但他忘记带手帕了,就不断把鼻涕用力吸入鼻子里。在黑板上写字的> 语文老师突然转过身来大嚷:“够了!给我停止! 吵死了!”全班一片安静。老师又> 说:“到底是谁上课时偷吃面条还这么大声?”
25. 病人对牙科医生说:“你真会赚钱,只用3秒钟就赚了3美元。”
医生回答:“如果你愿意的话,我可以用慢动作给你拔。”
26. "自恋"就是下辈子我一定要投胎做女人,然后嫁个象我这样的男人;"绝望"就是饭馆吃饭点了两菜,吃第一个:"世上还有比这更难吃的吗?!"吃第二个" 靠!还真有!""无语"就是法官问:你为什么印假钞?罪犯说:真钞我不会印
27. 织女下凡洗澡认识了牛郎,演绎一段惊天地泣鬼神的爱情故事,这件事告诉我们:在家洗澡是没有机会的,所以洗澡一定要到外面去洗.....
28. 小明上完厕所回到教室跟老师说:"厕所有好多蚂蚁" 老师忽然想到蚂蚁的英文ant这个单词,于是测试小明:"蚂蚁怎么说?" 小明一脸茫然……说:"蚂蚁他……什么也没说……"
29. 一人上班时老是放响屁,同事忍不住说他:"你能不能不出声啊?" 然后便看见他坐在那抖个不停.同事奇怪的问他在干什么,他答:"我不出声,现在已经调成振动的了!!!"
30. 母蚊子:"孩子,你怎么啦?"小蚊子哭着说:"今天小苍蝇它们欺负我,说我嗜血成性,是吸血鬼."母蚊子:"别理它,它们家也不是什么好东西,一个个都是 吃屎长大的
31. 我花8万买了个西周陶罐,昨儿到<鉴宝>栏目进行鉴定,专家严肃地说:"这哪是西周的?这是上周的!
32. 儿子:"娘,今天我数学测验不及格" 母亲:"为什么啊,什么题." 儿子:"老师问我2*3=?我说=6." 母亲:"这没错啊,然后呢." 儿子:"然后老师又问我3*2=?" 母亲:"这TMD不是一样的么!" 儿子:"我也是这么说的..
33. 一犯人执行枪决,子弹是"某某县"生产,质量不好,第一枪没放出,接着又开第二枪...第三枪......这时犯人大哭:"你掐死我吧,太吓人了!"
34. 父亲给儿子讲故事:"大伯叫小阳去砍柴,没想到小阳把大伯最爱的桃树给砍掉了,大伯看到了十分生气却没骂他,你知道为什么吗?"儿子回答道:"可能是因为 小阳手里还拿着斧头.所以不敢骂他
35. 屎壳郎和蚊子谈恋爱初次见面,屎壳郎:"你干啥的?"蚊子:"护士,打针的" 屎壳郎一把拉住蚊子的手痛哭流涕:"缘份啊,俺也是从医的,中医,捏药丸的
36. 一男人总找不到女朋友,无奈就去算命.算命大师说:你,前半生注定没女人;不得 那人眼睛一亮:那我后半生应该有吧? 算命师说:哎,到了后半生你就习惯了一个人的生活
37. 某人吃饭,牛肉拉面里看不到一块牛肉,便指着碗问老板:牛肉拉面怎么没有牛肉?老板淡淡地说:别太认真,难道你还指望从老婆饼里吃出个老婆吗?
38. 三个老鼠分别品尝美、日、中国的酒,喝美国酒的老鼠,走了3步就倒了;喝日本酒的老鼠,走了2步就倒了;喝中国二锅头的老鼠,手拿菜刀,大喊:"TMD 猫呢?"
39. 在餐馆里吃饭时,一位等了很长时间的顾客呼唤服务员问到"我点的红烧鱼怎么还没做好?""请您再稍等片刻,先生.""怎么?还要等?"顾客生气了,说到" 难道你们的鱼是现钓的吗?"
40. 从前有一个人叫阿爽。
他死掉了。
出殡那天。
他的家人哭喊:‘
爽阿……爽 阿。’
路人不解。问道:‘伱们爽什么阿。’
家人痛哭流涕:‘爽死了……爽死了!! 
41. 一男子要跳楼,刚赶回来的妻子大喊道:"亲爱的别冲动,我们的路还长着呢!"男子听后,毫不犹豫嗖地跳了下去.站在旁边的谈判专家说:"这位太太,你真不 应该这样威胁他
42. 局长与科长共乘电梯,局长放一屁后对科长说:"你放屁了"科长说:"不是我放的"不久科长被免职.局长在会上说:"屁大的事你都担待不起,要你何用?"
43. 一懒猫疯狂地追求一老鼠,终于结婚,婚后猫对老鼠百般苛护,老鼠很快变胖,老鼠很感动:"亲爱的为什么对我这么好呀!"猫嘿嘿笑道:"等你再胖一点就知道 了
44. 每次对着镜子,我心理总是自言自语的鼓励自己:"我长的很有创意,丑并不是我的本意,上天不要发脾气,我会勇敢的活下去,用我无尽的创意.来衬托这个世界 的美丽!其实我真的真的很有创意...
45. 朋友们一起去爬山,到山顶,一女生面对秀丽山河高喊:祖国啊!我的母亲!一暗恋她的男生赶紧跟着大喊:祖国啊!我的丈母娘!
46. 以前我买了两只小狗,叫"脸"的给你,叫"屁股"的给自己!可没两天"脸"不幸死于车祸以后每当我看见"屁股"就想起你的"脸"!如果你的"脸"还在,现 在也有"屁股"那么大了!
47. 唐增赶走悟空之后又遇到妖怪,他只好念紧箍咒想呼悟空回来救命,不久空中传来一个的声音:"对不起.您呼叫的用户不在服务区,请稍后再试.
48. 老鼠去方便,见熊也在,吓得不敢吱声,熊看了老鼠一眼,说:“你掉不掉毛?”老鼠哆嗦了一下不语。熊又问:“掉不掉毛啊,你?”老鼠战战兢兢地说:“不 掉……” 熊一把抓住老鼠擦擦屁股走了![把老鼠当卫生纸了..
49. 刚才和朋友聊天,其中有谈到你,知道吗?我和他们吵了起来,还差点动手打起来,因为他们有的说你像猴子,有的说你像猩猩,实在太过分了!根本没有把你当猪 看!
50. 熊猫生日,对大家说:我许了两个愿望,一个是可以把我的黑眼圈治好,另外就是希望有一张彩色照片
51. 蜜蜂狂追蝴蝶,蝴蝶却嫁给了蜗牛。蜜蜂不解:他哪里比我好 蝴蝶回答:人家好歹有自己的房子,哪像你住在集体宿舍
52. 有一天一头大象在洗澡。突然有一只蚂蚁走过来对这大象说。你站起来。打响就站起来。蚂蚁!你坐下去吧。大象不解问蚂蚁你想干什么呀。一会站起来一会坐下去 的。蚂蚁回答说!我的内裤丢了我看看是不是你偷穿
53.生产队买了只公驴,可是没几天就死了.刚好母驴发情了.生产队的员工就打电话去在外地出差 的生产队队长."队长啊,母驴发情,可是公驴已经死了.是先买头公驴还是等你回来?"
54. 小屎壳郎:妈妈,我们为什么要吃屎呢? 屎壳郎妈妈:这孩子,吃饭的时候怎么能说这么恶心的事
55. 夜空中一颗流星划过,我连忙许愿,希望你能变得漂亮些.谁知刚许完心愿,流星"嗖"的一下返回来,对我说"大哥,你成心为难我是不是?!!
56. 给我一个食堂的馒头作为支点,我就能翘起地球!<理解一下吧,这食堂的馒头太硬了...>
57. 看到"食堂的饭菜只能拿去喂猪,居然还给我们吃?"我想到一句话.一同学去食堂打饭,打到饭后问打饭师傅,"师傅,怎么你们沙子里面有米啊!!!"
58. 女孩必看的小故事:蝙蝠在上帝那投胎.上帝说可以答应你三个条件,蝙蝠说"我上辈子黑黑的,所以下辈子我要雪白的身体,也要有翅膀,我吸惯了血.还让我吸 血吧"上帝说,好我答应,大家知道他下辈子是什么吗?"卫生巾".哈哈.
59. 餐厅苍蝇对厕所苍蝇 说:你整天追腥逐臭,我整天吃香喝辣,过来吧!厕所苍蝇:道不同不相为谋, 吃在好有啥用,光屁屁美女你见过几个?
60. 大二时,全宿舍的女生都喜欢周华建的歌,一盘磁带被大家借来借去的。 一日,上铺的女生问:我的周华建呢?下铺的女生回答:在我床上呢!两秒钟寂静无声,然后全体翻倒在床。
61. 某男生给同班某友生取外号,叫胖猪,女生向老师哭诉,老师答应对该男生批评,第二天教师在班上讲:“某男生太没礼貌,随便给别人起外号,总不能别人象啥就 叫啥吧?”
62. 一条警犬看到马路上过来一条普通狗,就气势凶凶地跑去质问它:我是警犬,你是什么东西?普通狗不屑一顾地看看它说:蠢货,看清楚点,我是便衣!


smarteng 发布于 2010-5-25 02:57

程序优化小记--mysql语句优化

经过一个星期的修改,终于完成了[美衣坊],欢迎大家访问:http://www.miyifun.com

感觉自己的水平真的是太差了,有很多问题都不能马上解决,

当然有些是我不擅长的,例如:网站的美工样式,服务器的调整,

我只能尽我努力优化PHP代码了,经过一周的修改,程序基本可用了,

在修改的过程中碰到了SQL查询的问题,于是就学习一下mysql的sql语句查询优化。[break]

首先学一下explain方法:

 

Mysql Explain 详解

一.语法

explain < table_name >

例如: explain select * from t3 where id=3952602;

二.explain输出解释

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type | table | type  | possible_keys  | key     | key_len | ref   | rows | Extra |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

1.id

  我的理解是SQL执行的顺利的标识,SQL从大到小的执行.

例如:

mysql> explain select * from (select * from ( select * from t3 where id=3952602) a) b;

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

| id | select_type | table      | type   | possible_keys    | key     | key_len | ref  | rows | Extra |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

|  1 | PRIMARY     | <derived2> | system | NULL         | NULL    | NULL    | NULL |    1 |       |

|  2 | DERIVED     | <derived3> | system | NULL          | NULL    | NULL    | NULL |    1 |       |

|  3 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

很显然这条SQL是从里向外的执行,就是从id=3 向上执行.

2. select_type

就是select类型,可以有以下几种

(1) SIMPLE

简单SELECT(不使用UNION或子查询等) 例如:

mysql> explain select * from t3 where id=3952602;

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type | table | type  | possible_keys  | key     | key_len | ref   | rows | Extra |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

|  1 | SIMPLE      | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |   |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

(2). PRIMARY

我的理解是最外层的select.例如:

mysql> explain select * from (select * from t3 where id=3952602) a ;

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

|  1 | PRIMARY     | <derived2> | system | NULL         | NULL    | NULL    | NULL |    1 |       |

|  2 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4      |     |    1 |       |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

(3).UNION

UNION 中的第二个或后面的SELECT语句.例如

mysql> explain select * from t3 where id=3952602 union all select * from t3 ;

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type  | table      | type  | possible_keys     | key     | key_len | ref   | rows | Extra |

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

|  1 | PRIMARY      | t3         | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |    |

|  2 | UNION        | t3         | ALL   | NULL              | NULL    | NULL    | NULL  | 1000 |       |

|NULL | UNION RESULT | <union1,2> | ALL   | NULL   | NULL    | NULL    | NULL  | NULL |       |

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

(4).DEPENDENT UNION

UNION中的第二个或后面的SELECT语句,取决于外面的查询

mysql> explain select * from t3 where id in (select id from t3 where id=3952602 union all select id from t3)  ;

+----+--------------------+------------+--------+-------------------+---------+---------+-------+------+------------------+

| id | select_type        | table      | type   | possible_keys     | key     | key_len | ref   | rows | Extra     |

+----+--------------------+------------+--------+-------------------+---------+---------+-------+------+--------------------+

|  1 | PRIMARY            | t3         | ALL    | NULL              | NULL    | NULL    | NULL  | 1000 | Using where              |

|  2 | DEPENDENT SUBQUERY | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4     | const |    1 | Using index              |

|  3 | DEPENDENT UNION    | t3         | eq_ref | PRIMARY,idx_t3_id | PRIMARY | 4       | func  |    1 | Using where; Using index |

|NULL | UNION RESULT       | <union2,3> | ALL    | NULL             | NULL    | NULL    | NULL  | NULL |                          |

+----+--------------------+------------+--------+-------------------+---------+---------+-------+------+------------------+

(4).UNION RESULT

UNION的结果。

mysql> explain select * from t3 where id=3952602 union all select * from t3 ;

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type  | table      | type  | possible_keys     | key     | key_len | ref   | rows | Extra |

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

|  1 | PRIMARY      | t3         | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |       |

|  2 | UNION        | t3         | ALL   | NULL              | NULL    | NULL    | NULL  | 1000 |       |

|NULL | UNION RESULT | <union1,2> | ALL   | NULL         | NULL    | NULL    | NULL  | NULL |       |

+----+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+

(5).SUBQUERY

子查询中的第一个SELECT.

mysql> explain select * from t3 where id = (select id from t3 where id=3952602 )  ;

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+

| id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra       |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+

|  1 | PRIMARY     | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |             |

|  2 | SUBQUERY    | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4    |       |    1 | Using index |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+

(6).  DEPENDENT SUBQUERY

子查询中的第一个SELECT,取决于外面的查询

mysql> explain select id from t3 where id in (select id from t3 where id=3952602 )  ;

+----+--------------------+-------+-------+-------------------+---------+---------+-------+------+-------------------+

| id | select_type        | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra                 |

+----+--------------------+-------+-------+-------------------+---------+---------+-------+------+--------------------+

|  1 | PRIMARY            | t3    | index | NULL      | PRIMARY | 4       | NULL  | 1000 | Using where; Using index |

|  2 | DEPENDENT SUBQUERY | t3  | const | PRIMARY,idx_t3_id | PRIMARY | 4  | const | 1 | Using index   |

+----+--------------------+-------+-------+-------------------+---------+---------+-------+------+-----------------+

 

(7).DERIVED

派生表的SELECT(FROM子句的子查询)

mysql> explain select * from (select * from t3 where id=3952602) a ;

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

|  1 | PRIMARY     | <derived2> | system | NULL              | NULL    | NULL    | NULL |    1 |       |

|  2 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

 

3.table

显示这一行的数据是关于哪张表的.

有时不是真实的表名字,看到的是derivedx(x是个数字,我的理解是第几步执行的结果)

mysql> explain select * from (select * from ( select * from t3 where id=3952602) a) b;

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

|  1 | PRIMARY     | <derived2> | system | NULL              | NULL    | NULL    | NULL |    1 |       |

|  2 | DERIVED     | <derived3> | system | NULL              | NULL    | NULL    | NULL |    1 |       |

|  3 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

4.type

这列很重要,显示了连接使用了哪种类别,有无使用索引.

从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和 ALL

 

(1).system

这是const联接类型的一个特例。表仅有一行满足条件.如下(t3表上的id是 primary key)

mysql> explain select * from (select * from t3 where id=3952602) a ;

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

|  1 | PRIMARY     | <derived2> | system | NULL              | NULL    | NULL    | NULL |    1 |       |

|  2 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |

+----+-------------+------------+--------+-------------------+---------+---------+------+------+-------+

(2).const

表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

const 用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。在下面的查询中,tbl_name可以用于const表:

SELECT * from tbl_name WHERE primary_key=1;

SELECT * from tbl_name WHERE primary_key_part1=1和 primary_key_part2=2;

 

例如:

mysql> explain select * from t3 where id=3952602;

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

|  1 | SIMPLE      | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |   |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

 

(3). eq_ref

 

对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。

eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

在下面的例子中,MySQL可以使用 eq_ref联接来处理ref_tables:

SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column_part1=other_table.column

    AND ref_table.key_column_part2=1;

例如

mysql> create unique index  idx_t3_id on t3(id) ;

Query OK, 1000 rows affected (0.03 sec)

Records: 1000  Duplicates: 0  Warnings: 0

 

mysql> explain select * from t3,t4 where t3.id=t4.accountid;

+----+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+

| id | select_type | table | type   | possible_keys     | key       | key_len | ref                  | rows | Extra |

+----+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+

|  1 | SIMPLE      | t4    | ALL    | NULL              | NULL      | NULL    | NULL                 | 1000 |       |

|  1 | SIMPLE      | t3    | eq_ref | PRIMARY,idx_t3_id | idx_t3_id | 4       | dbatest.t4.accountid |  1 |   |

+----+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+

(4).ref

对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

ref可以用于使用=或<=>操作符的带索引的列。

在下面的例子中,MySQL可以使用ref联接来处理ref_tables:

SELECT * FROM ref_table WHERE key_column=expr;

SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column_part1=other_table.column

    AND ref_table.key_column_part2=1;

例如:

mysql> drop index idx_t3_id on t3;

Query OK, 1000 rows affected (0.03 sec)

Records: 1000  Duplicates: 0  Warnings: 0

mysql> create index idx_t3_id on t3(id) ;

Query OK, 1000 rows affected (0.04 sec)

Records: 1000  Duplicates: 0  Warnings: 0

mysql> explain select * from t3,t4 where t3.id=t4.accountid;

+----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+

| id | select_type | table | type | possible_keys     | key       | key_len | ref                  | rows | Extra |

+----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+

|  1 | SIMPLE      | t4    | ALL  | NULL              | NULL      | NULL    | NULL                 | 1000 |       |

|  1 | SIMPLE      | t3    | ref  | PRIMARY,idx_t3_id | idx_t3_id | 4       | dbatest.t4.accountid |    1 |       |

+----+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+

2 rows in set (0.00 sec)

(5).  ref_or_null

该联接类型如同ref,但是添加了 MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

 

在下面的例子中,MySQL可以使用 ref_or_null联接来处理ref_tables:

SELECT * FROM ref_table

WHERE key_column=expr OR key_column IS NULL;

(6). index_merge

该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。

例如:

mysql> explain select * from t4 where id=3952602 or accountid=31754306 ;

+----+-------------+-------+-------------+------------------+---------------------+---------+------+------+--------------+

| id | select_type | table | type        | possible_keys              | key                  | key_len | ref  | rows | Extra                                                |

+----+-------------+-------+-------------+----------------------------+-------------+---------+------+------+------------------+

|  1 | SIMPLE      | t4    | index_merge | idx_t4_id,idx_t4_accountid | idx_t4_id,idx_t4_accountid | 4,4     | NULL |    2 | Using union(idx_t4_id,idx_t4_accountid); Using where |

+----+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+---+

1 row in set (0.00 sec)

(7). unique_subquery

该类型替换了下面形式的IN子查询的ref:

 

value IN (SELECT primary_key FROM single_table WHERE some_expr)

unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。

(8).index_subquery

该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引:

value IN (SELECT key_column FROM single_table WHERE some_expr)

(9).range

只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。

当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range

mysql> explain select * from t3 where id=3952602 or id=3952603 ;

+----+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+

| id | select_type | table | type  | possible_keys     | key       | key_len | ref  | rows | Extra       |

+----+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+

|  1 | SIMPLE      | t3    | range | PRIMARY,idx_t3_id | idx_t3_id | 4       | NULL |    2 | Using where |

+----+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+

1 row in set (0.02 sec)

(10).index

该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。

当查询只使用作为单索引一部分的列时,MySQL可以使用该联接类型。

(11). ALL

 

对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。

 

5.possible_keys

possible_keys 列指出MySQL能使用哪个索引在该表中找到行。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。

 

如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询

6. key

key 列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

7.key_len

key_len 列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。

使用的索引的长度。在不损失精确性的情况下,长度越短越好

8. ref

ref列显示使用哪个列或常数与key一起从表中选择行。

9. rows

rows列显示 MySQL认为它执行查询时必须检查的行数。

10. Extra

该列包含MySQL解决查询的详细信息,下面详细.

(1).Distinct

一旦MYSQL找到了与行相联合匹配的行,就不再搜索了

(2).Not exists

MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,

就不再搜索了

(3).Range checked for each

Record(index map:#)

没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一

(4).Using filesort

看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行

(5).Using index

列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候

(6).Using temporary

看到这个的时候,查询需要优化了。这里,MYSQL 需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上

(7).Using where

使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题

 

其中:Explain的type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

 

——————————慢慢根据实际情况来做出优化————————————

等我的好消息吧~ 哇咔咔 ^_^


smarteng 发布于 2010-5-25 02:46

博主

    blogger

    smarteng

    人生就流星,虽然转瞬即逝,但也有永恒。

日历

恰饭

标签