mysql索引如何更新及索引的建立

花如月 2011-07-08 04:39:08
大家好,我遇到索引方面的问题,请教一下:
1.比如说我有个字段 username varchar(36),我创建索引的代码是alter table user_table add index(username),这样建立的索引是前缀索引还是全字段字节数的索引?
2.我发现我的username字段的数据当中有这样两条('partners metal','partnersmetal'),使用了alter table user_table add index(username);alter table user_table add unique index(username) 建立了唯一性索引,但是当我查询这两条记录的时候数据库就会挂掉,实在不知道问题是出在哪里,附查询语句:select * from user_table where username='partnersmetal';select * from user_table where username='partners metal'?
3.还有我想问下建立了唯一性索引之后,还需要不需要建立普通索引来提高查询速度?
4.索引方法有好几种,我不知道在什么样的情况下用哪种比较合适,索引方法(BTREE, FULLTEXT, HASH, RTREE)。

我主要是遇到了这个问题才让我想到了这么多问题,先谢谢大家了,我所有的分都奉上了

...全文
1256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
花如月 2011-07-12
  • 打赏
  • 举报
回复
刚刚发现 用sqlyog查询就挂掉,登录服务器查询ok的,晕,原来是sqlyog的问题,大家都在用什么管理软件呢?推荐一下,那种好用些,比较稳定的
tanruilei 2011-07-11
  • 打赏
  • 举报
回复
我是来学习的。。
花如月 2011-07-11
  • 打赏
  • 举报
回复
我很想结贴,大家帮帮忙啊
花如月 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acmain_chm 的回复:]

check table user_table 看一下。

show create table user_table 也看一下。
[/Quote]
我check是ok得,没有问题
花如月 2011-07-10
  • 打赏
  • 举报
回复

mysql> check table de_member;
+-------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------+-------+----------+----------+
| destoon.de_member | check | status | OK |
+-------------------+-------+----------+----------+
1 row in set (1.43 sec)

Create Table: CREATE TABLE `de_member` (
`userid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(36) NOT NULL,
`passport` varchar(30) NOT NULL DEFAULT '',
`company` varchar(100) NOT NULL DEFAULT '',
`password` varchar(32) NOT NULL DEFAULT '',
`payword` varchar(32) NOT NULL DEFAULT '',
`email` varchar(50) NOT NULL DEFAULT '',
`message` smallint(6) unsigned NOT NULL DEFAULT '0',
`gender` tinyint(1) unsigned NOT NULL DEFAULT '1',
`truename` varchar(20) NOT NULL DEFAULT '',
`mobile` varchar(50) NOT NULL DEFAULT '',
`msn` varchar(50) NOT NULL DEFAULT '',
`qq` varchar(20) NOT NULL DEFAULT '',
`ali` varchar(30) NOT NULL DEFAULT '',
`skype` varchar(30) NOT NULL DEFAULT '',
`department` varchar(30) NOT NULL DEFAULT '',
`career` varchar(30) NOT NULL DEFAULT '',
`admin` tinyint(1) unsigned NOT NULL DEFAULT '0',
`role` varchar(255) NOT NULL DEFAULT '',
`groupid` smallint(4) unsigned NOT NULL DEFAULT '4',
`regid` smallint(4) unsigned NOT NULL DEFAULT '0',
`sms` int(10) NOT NULL DEFAULT '0',
`credit` int(10) NOT NULL DEFAULT '0',
`money` decimal(10,2) NOT NULL DEFAULT '0.00',
`locking` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
`bank` varchar(30) NOT NULL DEFAULT '',
`account` varchar(30) NOT NULL DEFAULT '',
`edittime` int(10) unsigned NOT NULL DEFAULT '0',
`regip` varchar(50) NOT NULL DEFAULT '',
`regtime` int(10) unsigned NOT NULL DEFAULT '0',
`loginip` varchar(50) NOT NULL DEFAULT '',
`logintime` int(10) unsigned NOT NULL DEFAULT '0',
`logintimes` int(10) unsigned NOT NULL DEFAULT '1',
`black` varchar(255) NOT NULL DEFAULT '',
`send` tinyint(1) unsigned NOT NULL DEFAULT '1',
`auth` varchar(32) NOT NULL DEFAULT '',
`authvalue` varchar(100) NOT NULL DEFAULT '',
`authtime` int(10) unsigned NOT NULL DEFAULT '0',
`vemail` tinyint(1) unsigned NOT NULL DEFAULT '0',
`vmobile` tinyint(1) unsigned NOT NULL DEFAULT '0',
`vtruename` tinyint(1) unsigned NOT NULL DEFAULT '0',
`vbank` tinyint(1) unsigned NOT NULL DEFAULT '0',
`vcompany` tinyint(1) unsigned NOT NULL DEFAULT '0',
`inviter` varchar(30) NOT NULL DEFAULT '',
`user_id` char(36) NOT NULL,
PRIMARY KEY (`userid`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `passport` (`passport`),
KEY `groupid` (`groupid`),
KEY `truename` (`truename`),
KEY `company` (`company`),
KEY `user_id` (`user_id`),
KEY `username_2` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=263440 DEFAULT CHARSET=gbk COMMENT='▒▒Ա'
1 row in set (0.00 sec)
rucypli 2011-07-09
  • 打赏
  • 举报
回复
恩 估计表损坏

如果是myisam引擎则可以修复
ACMAIN_CHM 2011-07-09
  • 打赏
  • 举报
回复
check table user_table 看一下。

show create table user_table 也看一下。
花如月 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]

1.比如说我有个字段 username varchar(36),我创建索引的代码是alter table user_table add index(username),这样建立的索引是前缀索引还是全字段字节数的索引?
全字段字节数的索引

2.我发现我的username字段的数据当中有这样两条('partners metal','partnersmetal'),使用了alter table……
[/Quote]

就是直接Mysql无响应,然后就卡死了,只能强制关掉进程。不知道为啥~~
ACMAIN_CHM 2011-07-08
  • 打赏
  • 举报
回复
1.比如说我有个字段 username varchar(36),我创建索引的代码是alter table user_table add index(username),这样建立的索引是前缀索引还是全字段字节数的索引?
全字段字节数的索引

2.我发现我的username字段的数据当中有这样两条('partners metal','partnersmetal'),使用了alter table user_table add index(username);alter table user_table add unique index(username) 建立了唯一性索引,但是当我查询这两条记录的时候数据库就会挂掉,实在不知道问题是出在哪里,附查询语句:select * from user_table where username='partnersmetal';select * from user_table where username='partners metal'?
挂掉 是指什么?


3.还有我想问下建立了唯一性索引之后,还需要不需要建立普通索引来提高查询速度?
如果是同一字段,则不需要,如果是不同字段,则需要。

4.索引方法有好几种,我不知道在什么样的情况下用哪种比较合适,索引方法(BTREE, FULLTEXT, HASH, RTREE)。
在MYSQL中这个由MYSQL来选择,你没什么选择的权力。
rucypli 2011-07-08
  • 打赏
  • 举报
回复
1.比如说我有个字段 username varchar(36),我创建索引的代码是alter table user_table add index(username),这样建立的索引是前缀索引还是全字段字节数的索引?
全字段字节数的索引

2.我发现我的username字段的数据当中有这样两条('partners metal','partnersmetal'),使用了alter table user_table add index(username);alter table user_table add unique index(username) 建立了唯一性索引,但是当我查询这两条记录的时候数据库就会挂掉,实在不知道问题是出在哪里,附查询语句:select * from user_table where username='partnersmetal';select * from user_table where username='partners metal'?
alter table user_table add index(username);这句完全没必要

3.还有我想问下建立了唯一性索引之后,还需要不需要建立普通索引来提高查询速度?
唯一索引就是特殊点得普通索引

4.索引方法有好几种,我不知道在什么样的情况下用哪种比较合适,索引方法(BTREE, FULLTEXT, HASH, RTREE)。
mysql只有BTREE

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧