【问题标题】:how data stored in b-tree for composite key in mysql? i want to know about tree representation of datamysql中复合键的数据如何存储在b-tree中?我想知道数据的树表示
【发布时间】:2015-10-22 05:45:10
【问题描述】:

下面的复合键的 b-tree 看起来如何? 主键(imei_no,data_received_time)

imei_no 和 data_received_time 都是 bigInt。

请举例回答。

【问题讨论】:

标签: mysql database-administration b-tree


【解决方案1】:

数据会自动存储为btree,因为imei_no + data_received_time是主键,系统会创建一个b-tree索引。所以查找速度很快,这就是 b 树的全部意义所在。当然,该表本身只是一个普通表。

如果您想将表数据显示为 b-tree,则让您的 GUI 层对数据应用 b-tree 算法并相应地显示。

如果您想将表数据存储为 b-tree,则添加一个 ID 和一个父 ID,然后链接记录。但是,这会使您的数据分层,并且您需要在 SQL 中进行递归才能正确检索它。这可能非常困难——尤其是 MySQL,缺少递归 WITH 子句。 (或者您只是检索原始数据并再次让您的 GUI 层应用排序和表示。但如果是您的 GUI 层完成所有这些工作,为什么首先存储数据分层?)当然有比数据库更好的方法用于存储 b 树的表。所以如果你想这样做,首先问问自己,为什么你想这样做。

【讨论】:

  • 感谢回复。我有行表(超过 10 亿),当我执行查询时,执行它需要时间。我想尽量减少查询时间。所以我试着理解真实的索引机制以及复合键系统如何构建b-tree。如果您对如何提高mysql的性能有任何想法,请回复。
  • 我认为您不需要了解索引内部的工作原理。只需创建快速查找数据所需的索引。通过正确定义主键和外键,您可以自动获得最重要的索引。然后根据需要添加更多索引。对于大型表,如果您的查询仍然太慢,您可能还需要考虑分区。 dev.mysql.com/doc/refman/5.6/en/partitioning-overview.html
  • 也许您想向我们展示一个您认为太慢的查询,所以我们有一个可以讨论的示例?
  • 选择odom,latitude / 10000000作为纬度,经度/ 10000000作为经度,imei_no,iavalue,data_received_time,continue_data_received_time,data_location从gps_device_data_demo(7781112889,70433357641,11111111211412)和data_received_time> = 1441045800000 data_received_time
  • 我们已经完成了分区,但是查询速度慢了三倍。
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2014-09-19
  • 2023-01-27
  • 1970-01-01
相关资源
最近更新 更多