仓酷云

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

[学习教程] PHP网页编程之浅谈PHP开辟中MySQL数据库索引的经历

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

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

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

x
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。   假设咱们创立了一个testIndex表:
CREATE TABLE testIndex(i_testID INT NOT NULL,vc_Name VARCHAR(16) NOT NULL);
咱们随机向外面拔出了1000笔记录,个中有一条
    i_testID    vc_Name
      555    erquan
     
在查找vc_Name="erquan"的纪录
SELECT * FROM testIndex WHERE vc_Name='erquan';
时,假如在vc_Name上已创立了索引,MySql不必任何扫描,即正确可找到该纪录!相反,MySql会扫描一切纪录,即要查询1000次啊~~可以索引将查询速度进步100倍。
  1、索引分单列索引和组合索引
   单列索引:即一个索引只包括单个列,一个表可以有多个单列索引,但这不是组合索引。
   组合索引:即一个索包括多个列。
  2、引见一下索引的类型
    1.通俗索引。
      这是最根基的索引,它没有任何限制。它有以下几种创立体例:
      (1)创立索引:CREATE INDEX indexName ON tableName(tableColumns(length));假如是CHAR,VARCHAR类型,length可以小于字段实践长度;假如是BLOB 和 TEXT 类型,必需指定length,下同。
      (2)修正表布局:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
      (3)创立表的时分直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
   
    2.独一索引。
       它与后面的"通俗索引"相似,分歧的就是:索引列的值必需独一,但答应有空值。假如是组合索引,则列值的组合必需独一。它有以下几种创立体例:
       (1)创立索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
      (2)修正表布局:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
      (3)创立表的时分直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));
     3.主键索引
       它是一种特别的独一索引,不答应有空值。通常为在建表的时分同时创立主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 固然也能够用ALTER号令。
       记住:一个表只能有一个主键。
      4.全文索引
        MySQL从3.23.23版入手下手撑持全文索引和全文检索。这里不作会商,呵呵~~
    删除索引的语法:DROP INDEX index_name ON tableName
  3、单列索引和组合索引
    为了抽象地对照二者,再建一个表:
    CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) );
    在这10000笔记录外面7上8下地散布了5条vc_Name="erquan"的纪录,只不外city,age,school的组合各不不异。
  来看这条T-SQL:
    SELECT i_testID FROM myIndex WHERE vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;
    起首思索建单列索引:
    在vc_Name列上创立了索引。履行T-SQL时,MYSQL很快将方针锁定在了vc_Name=erquan的5笔记录上,掏出来放到一两头了局集。在这个了局集里,先扫除失落vc_City不等于"郑州"的纪录,再扫除i_Age不等于25的纪录,最初挑选出独一的合适前提的纪录。
    固然在vc_Name上创立了索引,查询时MYSQL不必扫描整张表,效力有所进步,但离咱们的请求还有必定的间隔。一样的,在vc_City和i_Age分离创立的单列索引的效力类似。
    为了进一步榨取MySQL的效力,就要思索创立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里:
    ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注重了,建表时,vc_Name长度为50,这里为何用10呢?由于普通情形下名字的长度不会超越10,如许会减速索引查询速度,还会削减索引文件的巨细,进步INSERT的更新速度。
    履行T-SQL时,MySQL不必扫描任何纪录就到找到独一的纪录!!
    一定有人要问了,假如分离在vc_Name,vc_City,i_Age上创立单列索引,让该表有3个单列索引,查询时和上述的组合索引效力一样吧?嘿嘿,大纷歧样,远远低于咱们的组合索引~~固然此时有了三个索引,但MySQL只能用到个中的谁人它以为仿佛是最无效率的单列索引。
    创立如许的组合索引,实际上是相当于分离创立了
        vc_Name,vc_City,i_Age
        vc_Name,vc_City
        vc_Name
    如许的三个组合索引!为何没有vc_City,i_Age等如许的组合索引呢?这是由于mysql组合索引"最左前缀"的了局。复杂的了解就是只从最左面的入手下手组合。并非只需包括这三列的查询城市用到该组合索引,上面的几个T-SQL会用到:
    SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
    SELECT * FROM myIndex WHREE vc_Name="erquan"
而上面几个则不会用到:
    SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
    SELECT * FROM myIndex WHREE vc_City="郑州"
  4、利用索引
    到此你应当会创立、利用索引了吧?但甚么情形下需求创立索引呢?普通来讲,在WHERE和JOIN中呈现的列需求创立索引,但也不完整如斯,由于MySQL只对 <,<=,=,>,>=,BETWEEN,IN,和某些时分的LIKE(前面有申明)才会利用索引。
    SELECT t.vc_Name FROM testIndex t LEFT JOIN myIndex m ON t.vc_Name=m.vc_Name WHERE m.i_Age=20 AND m.vc_City='郑州'  时,有对myIndex表的vc_City和i_Age创立索引的需求,因为testIndex表的vc_Name开呈现在了JOIN子句中,也有对它创立索引的需要。
    方才提到了,只要某些时分的LIKE才需创立索引?是的。由于在以通配符 % 和 _ 开首作查询时,MySQL不会利用索引,如
    SELECT * FROM myIndex WHERE vc_Name like'erquan%'
会利用索引,而
    SELECT * FROM myIndex WHEREt vc_Name like'%erquan'
    就不会利用索引了。
  5、索引的缺乏的地方
    下面说了那末多索引的坏话,它真的有像传说中那末优异么?固然会出缺点了。
    1.固然索引大大进步了查询速度,同时却会下降更新表的速度,如对表停止INSERT、UPDATE和DELETE。由于更新表时,MySQL不但要保留数据,还要保留一下索引文件
    2.创立索引会占用磁盘空间的索引文件。普通情形这个成绩不太严重,但假如你在一个大表上创立了多种组合索引,索引文件的会收缩很快。
    篇尾:
    讲了这么多,不过是想使用索引进步数据库的履行效力。不外索引只是进步效力的一个要素。假如你的MySQL有大数据的表,就需求花工夫研讨创立最优异的索引或优化查询语句。
从刚开始练习的PHP基础语法练习,到PHP语言在WEB中的应用,再到实际的项目开发,如留言版,相册系统,中小型公司网站系统,以及期间做过的有关团队合作的小游戏,让我受益匪浅,学到了很多。
飘灵儿 该用户已被删除
沙发
发表于 2015-2-4 08:04:06 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
乐观 该用户已被删除
板凳
发表于 2015-2-9 19:49:13 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
谁可相欹 该用户已被删除
地板
发表于 2015-2-27 19:22:21 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
小魔女 该用户已被删除
5#
发表于 2015-3-7 11:04:22 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
再见西城 该用户已被删除
6#
 楼主| 发表于 2015-3-15 01:06:35 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
若天明 该用户已被删除
7#
发表于 2015-3-17 19:10:46 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
兰色精灵 该用户已被删除
8#
发表于 2015-3-18 22:04:31 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
分手快乐 该用户已被删除
9#
发表于 2015-3-22 23:55:08 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
小女巫 该用户已被删除
10#
发表于 2015-3-24 10:30:09 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
小妖女 该用户已被删除
11#
发表于 2015-3-27 15:42:27 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
冷月葬花魂 该用户已被删除
12#
发表于 2015-4-11 17:36:19 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
金色的骷髅 该用户已被删除
13#
发表于 2015-4-28 23:36:27 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
活着的死人 该用户已被删除
14#
发表于 2015-5-4 16:10:46 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
愤怒的大鸟 该用户已被删除
15#
发表于 2015-6-19 01:09:07 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
变相怪杰 该用户已被删除
16#
发表于 2015-6-27 06:46:13 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
蒙在股里 该用户已被删除
17#
发表于 2015-7-1 06:56:09 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
飘飘悠悠 该用户已被删除
18#
发表于 2015-7-8 23:24:26 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
透明 该用户已被删除
19#
发表于 2015-7-13 05:21:38 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
深爱那片海 该用户已被删除
20#
发表于 2015-7-18 01:35:01 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 15:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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