`
风雪涟漪
  • 浏览: 507217 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9013
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18412
社区版块
存档分类
最新评论

Schema的优化和索引 - 选择最佳的数据类型 - 主键的选择

阅读更多

对于主键,选择一个好的数据类型尤为关键。你可能经常需要用这些列和其他做比较以及用这些列查找其他的列。你可能也把它们作为另一些表的外键。因此当你选择主键的数据类型时,应该保持相关表主键类型一致。

 

当选择主键的数据类型,你不仅要考虑存储类型,也要考虑MySQL操作和比较这些类型的表现情况。比如,MySQL内部存储ENUM和SET是作为整型的,但是当在字符串环境下作比较的时候,MySQL会把它们转为字符串。

 

一旦你选择了一个类型,要确定相关表都要使用这个类型。这个类型一定要精确,包括了它的属性,如UNSIGNED。混合不同的数据类型,会引起性能问题。即使不会,在类型比较的时候,也会出现很难发现的错误。在忘记比较不同的数据类型之后,这些错误往往会发生。

 

根据你需要值的范围,选择最小的数据类型的范围。并且要为以后留一些主键增长的空间。一个例子,你使用state_id来存储美国州的名称,你不需要上千或百万的值。因此你不需要使用INT。一个TINYINT就足够了并且它大小为3字节。如果你使用它作为其他表的外键。三字节就能发挥大的作用了。

 

Integer类型

Integer通常来说是主键类型的最佳选择。因为它很快并且可以自增。

 

ENUM 以及SET

通常来说,虽然它们对于表中包含状态或者类型值比较有用,但对于主键并不是一个好的选择。ENUM和SET比较适合存储一些如订单的状态,产品的类型,或者人的性别。

 

如果你使用了ENUM定义了一个产品的类型,你可能要根据唯一的ENUM字段来查找(你可能在这表中添加了产品的描述以及等等产品类型的相关信息)。这种情况下你可能使用ENUM作为主键,但是大多数情况要避免使用。

 

String类型

如果可以,要尽可能避免使用String做为主键。它会浪费许多空间以及处理起来要慢于Integer。当使用MyISAM的表时,使用String要尤为小心。默认的情况下,MyISAM会对String类型的索引进行压缩,这样会使查找变慢。

 

你也要小心使用随机的String.如MD5(),SHA1(),UUID().随机生成的String散列在大的空间中,这会降低插入和一些查询语句的速度。

 

  • 降低了INSERT语句,因为在索引中这插入的值会存入随机的位置。这回造成页的分割,随机硬盘访问,造成聚集索引碎片。
  • 降低SELECT速度,因为相邻的行被分散在硬盘和内存中。
  • 随机值会导致缓存能力的下降。因为它们消除了本地的引用。本地的引用是缓存的工作方式。如果所有的数据都已经“预热”了,把任意数据放到缓存中没有任何的优势并且,如果工作数据集合没有在内存中,缓存就会有很多刷新和查找丢失的现象。

 

如果使用的UUID值,要去掉破折号或者使用UNHEX( )把UUID转为16字节的数并且,把它们存在BINARY(16)的列。你可使用HEX来获得16进制的值。

 

UUID生成的值和其他哈希函数如SHA1()生成的值有所不同。UUID的值分布不均并且稍微有点连续。但是它还是没有整型好。

分享到:
评论

相关推荐

    mysql面试题-mysql经典面试题目-数据库的基本概念-SQL语法-事务处理-索引优化-性能调优-mysql-面试题目

    查询优化器分析和选择执行查询的最佳路径,以最大化性能,它是数据库管理系统的关键组件。 数据库连接池的配置和使用涉及设置最大和最小连接数、超时时间、验证策略等,例如在Java中,可以通过JDBC的DataSource接口...

    MySQL5.7-optmization

    - 不同的数据类型对存储空间的需求不同,选择合适的数据类型可以减少存储空间的使用。 - 例如,使用`TINYINT`代替`INT`可以节省空间。 3. **多表优化** - 在设计具有大量表的应用程序时,需要考虑如何最小化连接...

    西北工业大学软件学院数据库设计试验作业(全)

    - **逻辑设计**:将ER图转换为关系模式,包括确定数据类型、键和完整性约束,这是SQL建表的基础。 - **物理设计**:考虑存储效率和查询性能,选择合适的索引、分区等技术。 2. **SQL语言**: - **DDL(Data ...

    oracle创建表,索引,表空间,触发器,schema用户,序列的Sql文

    Oracle支持B树索引、位图索引等多种类型。例如,为EmployeeID创建索引: ```sql CREATE INDEX idx_employee_id ON Employees(EmployeeID); ``` 这条语句创建了一个名为idx_employee_id的索引,基于Employees表的...

    ssd7 exercise7 标准答案

    同时,这也涉及到数据库性能优化的概念,比如索引的使用、适当的数据类型选择以及良好的范式设计,以减少数据冗余并提高查询效率。 总的来说,"SSD7 Exercise7"提供了实践和巩固数据库设计和SQL技能的机会。通过...

    MySQL如何选择合适的索引

    B-Tree索引适用于大多数情况,包括主键和非主键索引,而哈希索引则适用于等值查询,全文索引用于文本搜索,空间索引处理几何数据。 考虑以下例子: 1. 当执行`SELECT * FROM employees WHERE name > 'a';`时,如果...

    MySQL数据库:使用NAVICAT工具创建和管理索引.pptx

    MySQL数据库是世界上最流行的开源关系...因此,应根据实际需求和数据查询模式来合理创建和维护索引,以实现数据库的最佳性能。在使用NAVICAT进行这些操作时,应确保熟悉其界面和功能,以便更高效地进行数据库管理工作。

    Laravel开发-laravel-schema

    `laravel-schema`支持创建各种索引,包括`primary()`(主键索引)、`unique()`(唯一索引)、`index()`(普通索引)以及`fulltext()`(全文索引)。 5. **运行迁移**: 使用`php artisan migrate`命令执行迁移...

    数据库编程(九)- MySQL优化

    - 正确的数据类型:选择最适合字段的数据类型,如使用INT而非BIGINT来存储较大的整数,或使用VARCHAR而非CHAR来节省空间。 - 数据规范:遵循第三范式(3NF),减少数据冗余,降低更新异常和插入异常的风险。 - ...

    DWRESCR DWH SCHEMA帮助文档

    选择合适的数据类型可以确保数据的有效性和存储效率。 8. **约束(Constraints)**:约束是定义表中数据规则的逻辑条件,如非空约束、检查约束等,它们确保了数据的完整性和一致性。 9. **ETL过程(Extract, ...

    jira-7-9-2-database-schema.pdf

    根据提供的部分内容,我们可以了解到Jira数据库中多个表的结构,其中包括表名、字段名、数据类型以及一些附加的约束信息(例如主键标记`[table]`)。下面将详细解析部分内容中出现的表及其字段: 1. jiradb.cwd_...

    SQL语句-sql语句转换成ent-schema.zip

    5. **定义键和索引**:找出主键和外键,这些都是维持数据完整性和引用完整性的关键。主键是表内的唯一标识符,而外键则是连接不同表的字段。 6. **创建关系**:在Ent-Schema中,用线连接相关的实体,并标记出关系...

    从零开始带你成为MySQL实战优化高手PDF64-116.zip

    首先,优化通常分为两个主要方面:SQL查询优化和系统配置优化。在SQL查询优化中,你将学习如何编写高效的查询语句,避免全表扫描,利用索引进行快速查找,以及理解和使用EXPLAIN分析查询执行计划。这部分内容可能会...

    VIP-mysql索引优化实战一(1)1

    总之,MySQL的索引选择策略取决于多个因素,包括但不限于查询条件、数据分布、索引类型和统计信息。在实际应用中,我们需要结合`EXPLAIN`和`optimizer_trace`等工具,分析查询执行计划,以确保数据库性能的最优化。...

    mysql优化方案

    在本文中,我们将讨论 MYSQL 优化方案,涵盖 BIOS 设置优化、IO 子系统优化、Schema 设计优化、索引设计优化和无法使用索引的场景等方面的知识点。 BIOS 设置优化 在 BIOS 设置优化中,我们需要选择合适的系统配置...

    Python-Facebook开源在线MySQL表结构变更工具OnlineSchemaChange

    随着社区的发展,OSC的功能和性能将持续优化。 总结来说,Facebook的OnlineSchemaChange工具为MySQL数据库管理员提供了高效、安全的在线表结构变更方案,它结合了Python的便捷性和MySQL的稳定性,是现代分布式系统...

    手动添加schema文件

    理解每个元素的含义,例如表格名、列名、数据类型、主键、外键等。 2. **创建数据库**:在数据库管理系统中,你需要先创建一个数据库,这通常是通过执行`CREATE DATABASE` SQL语句来完成的。例如,在MySQL中,你...

    mysql基础知识和mysql优化整理

    2. 数据类型:MySQL支持多种数据类型,如整数类型(TINYINT、INT、BIGINT)、浮点类型(FLOAT、DOUBLE)、字符串类型(CHAR、VARCHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP)等。 3. SQL语言...

Global site tag (gtag.js) - Google Analytics