MYSQL InnoDB 引擎索引(B-Tree)

标签 mysql database

我有以下用户注册表:

      ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      User_name VARCHAR(35) NOT NULL,
      Full_name VARCHAR(55) NOT NULL,
      User_vars VARCHAR(255) NOT NULL,
      BirthDay DATE NOT NULL,
      password CHAR(70) NOT NULL,  
      Security_hint VARCHAR(27) NOT NULL,
      Email VARCHAR(225) NOT NULL,
      userType ENUM ('a','b','c','d') NOT NULL DEFAULT 'a',
      Signup_Date TIMESTAMP NOT NULL  DEFAULT CURRENT_TIMESTAMP,
      activation   TINYINT(1) UNSIGNED NOT NULL,
      Ip BINARY(16) NOT NULL,
      PRIMARY KEY (ID),
      UNIQUE KEY User_name (User_name,Email)

我真的很困惑我是否应该索引字段 BirthDay、Signup_Date、Full_name、User_vars 和 userType,因为这些信息必须显示在用户访问的任何页面中。

User_vars 是用户可能每天(甚至每周)更新的字段;我认为索引这个字段可能不是一个好主意,因为索引会减慢写入操作;如果错了请纠正我。我在其他表中有许多其他类似的字段(用户每天更新的字段,他们的更新必须显示在他们访问的任何页面中),并且不知道是否也必须对它们进行索引

注意:我知道我可以查询一次然后缓存它们,但是我担心对表的第一次查询返回结果集会很慢。

非常感谢

最佳答案

为了提高性能,将 VARCHAR 更改为 TINYTEXT,这允许行具有固定大小,从而加快表扫描。根据该表,查询可能针对用户名和电子邮件。将它们更改为 CHAR 并为它们编制索引。

关于MYSQL InnoDB 引擎索引(B-Tree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163218/

相关文章:

mysql - 我的左连接联合右连接不太工作 - 我正在尝试模拟完整的外连接

mysql - 如何通过一个查询在多列中查找所有相同的值

mysql - 功能依赖性澄清

mysql - 电子商务数据库查询将行显示为列

mysql - 如何在 MySQL 中将名称中的一个字母替换为另一个字母?

SQL Server - 从 2 列中获取不同的 ID 并存储在一个列表中

java - 我应该如何使用 2 个线程从数据库中收集数据?

mysql - 如何使用变量 SET 在 MySQL 中使用 ORDER BY

MySQL : Outer Join Query : Some alternate better approach (overriding field value by other table's field value only if available)

android - 如何使用android volley将数据发布到mysql