我在上有一个拥有超过30亿行的MySQL表。
我希望了解如何从列数据类型、行数和索引来解释磁盘上的总大小。
我希望这能像
size_of_table_in_bytes = num_rows * [ Sum over i {bytes_for_datatype_of_column(i))}
+ Sum over j {Bytes_for_index(j)} ]
但我最终得到的磁盘大小不正确,而不是我的数据库大小显示的大小。
使用每个数据类型的字节
中的InnoDB头和索引中的其他字节
以下是我对头、列和索引占用的字节的
我希望我的查询(返回一行)的结果以这样的文本显示:
columnA: value
columnB: value
columnC: value
就像在mysql中使用
select * from tablename \G
有没有办法做到这一点?这样做的原因是,能够打印出一条包含列和值的记录是有帮助的,例如数据,或者共享来自具有许多列的表的记录,这些记录很难在屏幕上查看。
我是MySQL的新手,必须为学校学习它。我已经为数据库做了ERD,当我试图转发它时,我会得到以下错误:
Executing SQL script in server
ERROR: Error 1171: All parts[![enter image description here](https://i.stack.imgur.com/PngF7.png)](https://i.stack.imgur.com/PngF7.png) of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
好的,我在这里有一个SQL查询:
SELECT a.id,... FROM article AS a WHERE a.type=1 AND a.id=3765 ORDER BY a.datetime DESC LIMIT 1
我想按国家和id获取准确的文章,并为该索引创建两列type和id。Id也是主键。我使用EXPLAIN关键字来查看使用了哪个索引,它使用的不是多列索引,而是主键索引,但我确实在创建索引时准确地设置了where内容。
MySQL是否使用主键索引而不是多列索引,因为主键索引更快?或者我应该强制MySql使用多列索引?
附注:刚刚注意到,当只有一个结果行时,使用order是很愚