mysql索引以及数据库设计工作中的技巧

之前有介绍过创建数据库和创建数据表等一些简单操作,本文主要讲述了mysql的四种索引以及mysql命名的技巧和数据库具体设计工作中的技巧,如果是刚学习mysql的话可以多看看此系列的文章

#mysql主要有四种索引
#1.主键索引(PRIMARY KEY)
#2.唯一索引(UNIQUE)
#3.常规索引(INDEX)
#4.全文索引(FULLTEXT)
#innoDB不支持全文索引

#主键索引:
    CREATE TABLE books(
        bid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        cid MEDIUMINT(8) NOT NULL,
        bookname VARCHAR(50) NOT NULL,
        price DOUBLE NOT NULL,
        detail TEXT NOT NULL,
        RPIMARY KEY(bid)
    );

#唯一索引
    CREATE TABLE carts(
        cid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        catname VARCHAR(15) NOT NULL UNIQUE
    );

#常规索引
    CREATE TABLE carts(
        cid INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        uid INT(10) NOT NULL,
        bid INT(10) NOT NULL,
        num INT(10) NOT NULL,
        KEY ind(uid,bid)
    );

#创建常规索引的时候可以使用关键字KEY或者INDEX随表一起创建,也可以在创建表只有使用CREATE INDEX或ALTER TABLE命令来创建.
#如果未给出索引名ind,系统会根据第一个索引列的名称自动选一个(建议使用"表明_列表"为索引命名),就需要使用CREATE INDEX命名来创建同样的常规索引,如下所示
--CREATE INDEX ind ON cats(uid,bid);

#全文索引
    CREATE TABLE boks(
        bookid INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        bookname VARCHAR(50) NOT NULL,
        price DOUBLE NOT NULL,
        detail TEXT NOT NULL,
        PULLTEXT(detail)
    );

#虽然创建全文索引非常类似于创建其它类型的索引,但基于全文索引的获取查询却不同,当机遇全文索引获取数据时,在SELECT语句中需要使用MATCH()和AGAINST()两个特殊的MYSQL函数.MATCH()函数负责列举将对他进行搜索的一个或者多个数据列,而AGAINST()函数则负责给出搜索字符串.

#例如
    SELECT book_name,price FROM books WHERE MATCH(detail) AGAINST('hello'); #全文索引

1.在设计数据库时,一定要给予自己充足的世界(如果等到数据库已经充满了数据、配到的客户端程序也已经开发完成时,才猛然发现数据库设计方案还需要修改,name将需要花费时间和精力可就大了)
2.如果发现自己给数据列起的名字里有序号,如name1,name2或者object1、object2,请提高警惕,这种现象几乎总是意味着还有更好的解决方案(没有想到再多创建一张数据表么)
3.在第一时间向数据库里输入一些测试用途的数据,而且尽可能多地包括一些特殊情况.如果数据库里的数据出现了冗余,即同一个数据列里多次出现了同样的内容,往往是应该吧数据表拆分成两张(或者多张)新数据表的提示信号.
4.注意发现和运用各张数据表之间的提示信号.
5.掌握SQL语言.缺少SQL变成的人是很难拿出一个优秀的数据库设计方案的.把信息存入数据库的目的是为了让更多人能够使用SQL查询命令把它们迅速、准确地查出来,只有了解SQL查询命令的涉及范围,才能找出把数据分门别类地存入数据库的最佳办法
6.找个示例数据作为借鉴

数据库的设计要求
1.数据表里没有重复、冗余的数据
2.数据表里没有order1,order2,order3等数据列.要知道,就算定义了10个这样的数据列,也迟早会发生某个用户想要订购11件商品的事情.
3.全体数据表的空间占用总量越小越好.
4.使用频率高的数据库查询都能以搞笑的方式执行.

命名的技巧
1.MySql对数据库列的名字不区分字母的大小写形式,但对数据库和数据表的名字却区分.因此至少是在给数据库和数据表明明是,应该以一种统一的模式来使用大写和小写字母.
2.数据库、数据表和数据列的名字最多可以有64个字符
3.在名字里要避免使用特殊字符.MySQL允许使用所有的字母和数字字符,但不同的操作系统和不同的Linux发行版本所使用的默认字符集往往也不同,而对默认字符集等系统设置进行修改往往会导致一些难以预料的后果.
4.数据列和数据表的名字应该有意义.要尽可能地让数据列的名字可以准确的反映出他们的内容和用途.例如,authNmae这样的名字就比name好.
5.按照一定规范系统地给数据列命名有助于减少粗心产生的错误.喜欢选择项author_name这样的名字还是喜欢像authrname这样的名字并不重要,关键是应该保持同一种风格.

数据库具体设计工作中的技巧
1.从一批数量相对较少的测试性数据入手去尝试把它们纳入一张或多张数据表(如果测试性数据太少,有些设计问题就可能发现不了;但如果太多,有难免会让用户在设计阶段浪费很多的时间).
2.在第一次尝试时最好不要立刻就去创建和使用真正的MySQL数据表,应该现在Excel或OpenOffice Cale等电子表格程序里用一些工作表吧Mysql数据表勾勒出来.这样做的好处是可以在一个相对简单得多的环境下展开工作.在这个阶段,应该吧注意力放在要把那些数据安排到哪些数据表和哪些数据列,还不到考虑数据列格式和索引等数据库设计细节的时候.

2 条评论

发表评论

*