繁体   English   中英

我该如何索引这个MySQL数据库?

[英]How should I index this MySQL db?

我正在创建一个允许用户向公众分享特定页面的网站。 它类似于jsbin.com让你创建你正在处理的脚本的公共URL。 我现在使用的基本MySQL表是:

CREATE TABLE IF NOT EXISTS `lists` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `hash` varchar(6) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `hash` (`hash`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

key段是保存用户将在URL末尾键入的随机字符串的列。 因此,例如,如果用户在那里使用散列值a1b2c3公布那个页面,那么URL将是http://mysite.com/a1b2c3

好的,抱歉描述花了这么长时间。 我的问题是,我应该索引哈希列吗? 这会使查询更快,因为我主要是通过哈希值查看行吗?

另外,我有另一个表与此键具有外键关系。 将它与哈希列相关联是否在性能方面有意义?

谢谢您的帮助。

您不仅应该对哈希列进行索引,还应该将其作为主键并删除冗余的id列。

您是否还有其他表格和/或列未在此处列出? 此表在created_at列之外几乎没有任何意义。

是的,如果您通过哈希查找,那么您肯定希望在该字段上有索引。 根据表格设计的外观,您可能希望它也是一个独特的索引。

是的,你肯定应该索引hash列,这是非常重要的,禁用密钥压缩。

密钥压缩是MyISAM索引中的一项功能,它通过仅在索引键中存储公共前缀的长度来缩小文本索引的大小。

这可能有助于提高人类语言短语的表现,但不会对哈希有所帮助。

我的博客中的这篇文章比较了类似哈希的字符串的索引查找性能以及关键压缩的开启和关闭:

要禁用密钥压缩,请将PACK_KEYS = 0添加到CREATE TABLE语句中。

更新:

您的CREATE TABLE此语句:

UNIQUE KEY `hash` (`hash`)

有效地创建一个hashUNIQUE索引,所以你已经拥有它。 只需确保关键压缩已关闭。

是。 为该列添加UNIQUE INDEX非常重要。 首先,你必须确保它是独一无二的(好吧......它是一种ID),你会做很多像下面的查询:

SELECT .... FROM .... WHERE hash = 'abc323';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM