mysql怎么组合索引 mysql组合索引存储结构( 二 )


[code]
SELECT * FROM mytable WHREE username="admin" AND city="郑州"SELECT * FROM mytable WHREE username="admin"
mysql联合索引如何创建?CREATE TABLE `test` ('aaa' varchar(16) NOT NULL default '', 'bbb' varchar(16) NOT NULL default '','ccc' int(11) UNSIGNED NOT NULL default 0, KEY `sindex` (`aaa`,`bbb`,`ccc`) )ENGINE=MyISAM COMMENT='';\x0d\x0a\x0d\x0a这样就在 aaa、bbb、ccc 3列上建立联合索引了 。\x0d\x0a\x0d\x0a如果表已经建好了,那么就在phpmyadmin里面执行:\x0d\x0aalert table test add INDEX `sindex` (`aaa`,`bbb`,`ccc`) \x0d\x0a\x0d\x0a就可以在这3列上建立联合索引了 。
MySQL中如何设置唯一索引,联合索引?1.UNIQUE 关键字建唯一索引\x0d\x0amysql CREATE TABLE `wb_blog` (\x0d\x0a-`id` smallint(8) unsigned NOT NULL,\x0d\x0a-`catid` smallint(5) unsigned NOT NULL DEFAULT '0',\x0d\x0a-`title` varchar(80) NOT NULL DEFAULT '',\x0d\x0a-`content` text NOT NULL,\x0d\x0a-PRIMARY KEY (`id`),\x0d\x0a-UNIQUE KEY `catename` (`catid`)\x0d\x0a- ) ;\x0d\x0a如果建好表mysql怎么组合索引了mysql怎么组合索引 , 可以用以下语句建\x0d\x0a mysql CREATE UNIQUE INDEX catename ON wb_blog(catid);\x0d\x0a\x0d\x0a2.联合索引\x0d\x0aALTER TABLE `tasks`\x0d\x0aADD INDEX `testabc` (`title`, `created`) ;\x0d\x0a\x0d\x0a3联合唯一索引(假设有这个需求mysql怎么组合索引,在同一天内不能建两个tiltle一样mysql怎么组合索引的任务)\x0d\x0aALTER TABLE `tasks`\x0d\x0aADD UNIQUE INDEX `testabc` (`title`, `created`) ;\x0d\x0a\x0d\x0a数据库建索引的科学性事关数据库性能mysql怎么组合索引,索引也不是越多越好 。
mysql 联合索引原理详述在一个市民信息表上,是否有必要将身份证号
和名字建立联合索引?
假设这个市民表的定义是这样的:
CREATE TABLE `tuser` (
`id` int(11) NOT NULL,
`id_card` varchar(32) DEFAULT NULL,
`name` varchar(32) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`ismale` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_card` (`id_card`),
KEY `name_age` (`name`,`age`)
) ENGINE=InnoDB
我们知道 , 身份证号是市民的唯一标识 。也就是说,如果有根据身份证号查询市民信息的需求,
我们只要在身份证号字段上建立索引就够了 。而再建立一个(身份证号、姓名)的联合索引,是
不是浪费空间?
如果现在有一个高频请求,要根据市民的身份证号查询他的姓名,这个联合索引就有意义了 。它
可以在这个高频请求上用到覆盖索引 , 不再需要回表查整行记录,减少语句的执行时间 。
当然,索引字段的维护总是有代价的 。因此,在建立冗余索引来支持覆盖索引时就需要权衡考虑
了 。这正是业务 DBA,或者称为业务数据架构师的工作 。
最左前缀原则
看到这里你一定有一个疑问,如果为每一种查询都设计一个索引 , 索引是不是太多了 。如果我现
在要按照市民的身份证号去查他的家庭地址呢?虽然这个查询需求在业务中出现的概率不高 , 但
总不能让它走全表扫描吧?反过来说,单独为一个不频繁的请求创建一个(身份证号 , 地址)的
索引又感觉有点浪费 。应该怎么做呢?
这里,我先和你说结论吧 。B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录 。
为了直观地说明这个概念,我们用(name,age)这个联合索引来分析 。
图 2 (name,age)索引示意图
可以看到,索引项是按照索引定义里面出现的字段顺序排序的 。
当你的逻辑需求是查到所有名字是“张三”的人时,可以快速定位到 ID4,然后向后遍历得到所有
需要的结果 。

推荐阅读