发布新日志

  • 索引分析和优化

    2008-11-05 16:09:38

    (1)什么是索引?
    索引用来快速地寻找那些具有特定值的记录,SQL索引都以B-树的形式保存。如果没有索引,执行查询时SQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,SQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

    (2)索引的类型
    普通索引
    这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:

    创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
    修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
    创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

    唯一性索引
    这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
    创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
    修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
    创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) 
    );

    主键
    主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

    单列索引与多列索引
    索引可以是单列索引,也可以是多列索引

    最左前缀
    多列索引还有另外一个优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,SQL将使用fname_lname_age索引:
    firstname,lastname,age
    firstname,lastname
    firstname

    从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些不能够使用这个fname_lname_age索引(按最左原则,第一个是firstname):
    lastname,age
    lastname
    age

    (3)选择索引列
    在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在WHERE子句中出现的列,在join子句中出现的列。
    SELECT people.age, ##不使用索引 town.name ##不使用索引 FROM people LEFT JOIN town ON 
    people.townid=town.townid ##考虑使用索引 WHERE firstname='Mike' ##考虑使用索引 AND 
    lastname='Sullivan' ##考虑使用索引

    那么,我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢?差不多如此,但并不完全。我们还必须考虑到对列进行比较的操作符类型。SQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”这个查询不会使用索引

    索引的缺点
    首先,索引要占用磁盘空间。通常情况下,这个问题不是很突出。但是,如果你创建每一种可能列组合的索引,索引文件体积的增长速度将远远超过数据文件。如果你有一个很大的表,索引文件的大小可能达到操作系统允许的最大文件限制。
    第二,对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度。这是因为SQL不仅要把改动数据写入数据文件,而且它还要把这些改动写入索引文件。

  • sql中的表连接

    2008-11-04 17:36:30

    (1)UNION:            可以将两个以上的表的相类似的查询结果放在一起 (union all则表示返回所有的行)
    具体语法:
    select ...
    union[all]
    select...
    ==========

    (2)INTERSECT:  返回两个表中相同的信息
    具体语法:
    select ...
    intersect
    select...
    ==========

    (3)MINUS   :  返回一个表中出现的信息

     

  • mysql安装

    2007-12-07 12:14:11

    安装mysql
    解压缩mysql-4.1.13-win32.zip,运行setup.exe
    首先出现的是安装向导欢迎界面,直接点击“Next”
    继续,选择安装类型,选择“自定义”custom安装,然后点“Next”下一步,出现自定义安装界面
    选择安装路径:C:\MySQL Server 4.1(可自定义)
    点“OK”返回到自定义安装界面,路径已改为设置的路径
    点“Next”,准备开始安装
    点“Install”开始安装
    完成后出现创建MySQL.com帐号的界面
    如果是首次使用MySQL,选“Create anew free MySQL.com accout”
    点“Next”,输入你的Email地址和自己设定的用于登录MySQL.com的密码
    填完后点“Next”进入第二步
    填写姓名等相关信息,填完点“Next”,进入第三步
    填完电话号码、公司名称等信息后,点“Next”,
    然后出现预览你刚才填的信息的界面,点“Next”出现安装完成界面
    注意,这里有个配置向导的选项(Configure the MySQL Server now),
    建议勾选立即配置你的MySQL。许多说安装完MySQL后无法启动,原因就在于没有配置MySQL。
    点击“Finish”完成安装,并开始配置MySQL
    点“Next”,进入配置类型选择页面。选“Detailed configuration”(详细配置)
    点“Next”,进入服务类型选择页面。选“Developer Machine”(开发者机器),这样占用系统的资源不会很多
    点“Next”后,进入数据库用法选择页面。选择“Multifunctional Database”
    点“Next”,进入选择InnoDB数据存放位置页面
    不用更改设置,直接放在Installation Path安装目录里即可,然后点“Next”,选择MySQL的同时联接数
    选择“Manual Setting”,设置为100(根据自己需要,酌情设置)
    点“Next”,配置MySQL在TCP/IP通讯环境中的端口选择默认的3306端口即可。
    点“Next”,选择MySQL中的字符设置
    注意,这里的选择将会影响你是否能在MySQL中使用中文。选择gb2312字符集以便支持简体中文
    点“Next”,设置Windows服务选项
    注意,这里的选择很关键。
    “Install As Windows Service”一定要勾选,这是将MySQL作为Windows的服务运行。
    “Service Name”就用默认的“MySQL”
    下面的“Launch the MySQL Server automatically”一定要勾选,这样Windows启动时,MySQL就会自动启动服务,要不然就要手工启动MySQL。
    许多人说安装MySQL后无法启动、无法连接、出现10061错误,原因就在这里。
    点“Next”,设置根帐号root的登录密码
    “Modify Security Settings”是设置根帐号的密码,输入你设定的密码即可。
    “Create An Anonymous Account”是创建一个匿名帐号,这样会导致未经授权的用户非法访问你的数据库,有安全隐患,建议不要勾选。
    点“Next”,MySQL配置向导将依据你上面的所有设定配置MySQL,以便MySQL的运行符合你的需要
    点“Execute”开始配置,当出现“Service started successfully”时,说明你的配置完成,MySQL服务启动成功
    点“Finish”完成,整个MySQL的配置完成,剩下的就是用MySQL客户端连接MySQL服务器,然后使用了。
232/2<12
Open Toolbar