仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 884|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之为数据库创立索引(二)

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
可以在书上很方便地做标记,及时记下自己的心得体会。数据|数据库|索引   接着,来个略微庞杂一点的,假如有个ORDER BY字句呢?不论你信不信,大多半的数据库在利用order by的时分,都将会从索引中受害。

   SELECT * FROM mytable
    WHERE category_id=1 AND user_id=2
     ORDER BY adddate DESC;

有点利诱了吧?很复杂,就象为where字句中的字段创立一个索引一样,也为ORDER BY的字句中的字段创立一个索引:

   CREATE INDEX mytable_categoryid_userid_adddate
     ON mytable (category_id,user_id,adddate);

   注重: "mytable_categoryid_userid_adddate" 将会被截短为

   "mytable_categoryid_userid_addda"

   CREATE

   EXPLAIN SELECT * FROM mytable
    WHERE category_id=1 AND user_id=2
     ORDER BY adddate DESC;

   NOTICE: QUERY PLAN:

   Sort (cost=2.03..2.03 rows=1 width=16)
    -> Index Scan using mytable_categoryid_userid_addda
       on mytable (cost=0.00..2.02 rows=1 width=16)

   EXPLAIN

  看看EXPLAIN的输入,好象有点可骇啊,数据库多做了一个咱们没有请求的排序,这下晓得功能若何受损了吧,看来咱们关于数据库的本身运作是有点过于悲观了,那末,给数据库多一点提醒吧。

  为了跳过排序这一步,咱们其实不需求其它别的的索引,只需将查询语句略微改一下。这里用的是postgres,咱们将给该数据库一个额定的提醒--在ORDER BY语句中,到场where语句中的字段。这只是一个手艺上的处置,并非必需的,由于实践上在别的两个字段上,其实不会有任何的排序操作,不外假如到场,postgres将会晓得哪些是它应当做的。

   EXPLAIN SELECT * FROM mytable
    WHERE category_id=1 AND user_id=2
     ORDER BY category_id DESC,user_id DESC,adddate DESC;

   NOTICE: QUERY PLAN:

   Index Scan Backward using
    mytable_categoryid_userid_addda on mytable
     (cost=0.00..2.02 rows=1 width=16)

   EXPLAIN

如今利用咱们意料的索引了,并且它还挺伶俐,晓得可以从索引前面入手下手读,从而防止了任何的排序。

以上说得细了一点,不外假如你的数据库十分伟大,而且逐日的页面恳求达上百万算,我想你会获益很多的。不外,假如你要做更加庞杂的查询呢,例如将多张表联合起来查询,出格是where限制字句中的字段是来自不止一个表格时,应当如何处置呢?我凡是都尽可能防止这类做法,由于如许数据库要将各个表中的器材都联合起来,然后再扫除那些不适合的行,弄欠好开支会很大。

  假如不克不及防止,你应当检查每张要联合起来的表,而且利用以上的战略来创立索引,然后再用EXPLAIN号令验证一下是不是利用了你意料中的索引。假如是的话,就OK。不是的话,你能够要创立一时的表来将他们联合在一同,而且利用恰当的索引。

  要注重的是,创立太多的索引将会影响更新和拔出的速度,由于它需求一样更新每一个索引文件。关于一个常常需求更新和拔出的表格,就没有需要为一个很少利用的where字句独自创立索引了,关于对照小的表,排序的开支不会很大,也没有需要创立别的的索引。

  以上引见的只是一些非常根基的器材,其实外面的学问也很多,单凭EXPLAIN咱们是不克不及剖断该办法是不是就是最优化的,每一个数据库都有本人的一些优化器,固然能够还不太完美,然而它们城市在查询时对照过哪一种体例较快,在某些情形下,创立索引的话也未必会快,例如索引放在一个不一连的存储空间时,这会增添读磁盘的承当,因而,哪一个是最优,应当经由过程实践的利用情况来查验。

  在刚入手下手的时分,假如表不大,没有需要作索引,我的定见是在需求的时分才作索引,也可用一些号令来优化表,例如MySQL可用"OPTIMIZE TABLE"。

  综上所述,在若何为数据库创立得当的索引方面,你应当有一些根基的概念了。
  当然你可以把你最基本的功能放出来的时候就放出来,比如放到论坛上,让大家都参与,
透明 该用户已被删除
沙发
发表于 2015-2-4 11:14:16 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
活着的死人 该用户已被删除
板凳
发表于 2015-2-5 04:46:07 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
蒙在股里 该用户已被删除
地板
发表于 2015-2-8 20:54:41 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-14 05:16:42 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
柔情似水 该用户已被删除
6#
发表于 2015-3-3 07:29:11 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
谁可相欹 该用户已被删除
7#
发表于 2015-3-14 14:34:04 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
兰色精灵 该用户已被删除
8#
发表于 2015-3-17 11:10:38 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
海妖 该用户已被删除
9#
发表于 2015-3-24 08:44:36 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
金色的骷髅 该用户已被删除
10#
发表于 2015-3-29 15:05:17 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
若相依 该用户已被删除
11#
发表于 2015-4-4 11:14:41 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
小妖女 该用户已被删除
12#
发表于 2015-4-5 05:55:58 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-4-11 11:28:18 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
冷月葬花魂 该用户已被删除
14#
发表于 2015-4-12 02:22:02 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
再见西城 该用户已被删除
15#
发表于 2015-4-12 06:18:42 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
小魔女 该用户已被删除
16#
发表于 2015-4-12 08:20:19 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
深爱那片海 该用户已被删除
17#
发表于 2015-4-21 06:36:17 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
变相怪杰 该用户已被删除
18#
发表于 2015-4-28 21:24:09 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
爱飞 该用户已被删除
19#
发表于 2015-5-1 16:12:27 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
不帅 该用户已被删除
20#
 楼主| 发表于 2015-7-6 00:42:21 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表