所以我发布了this!昨天得到了一个完美的答案,需要先运行此代码:ALTER TABLE mytable AUTO_INCREMENT = 10000001;
我跑了几次,但是在几个小时不能正常工作后重新启动了WAMP。过夜(12小时)后,代码仍未运行。
我想知道我的数据库表大小是否超过了mysql或我的计算机或两者的限制。
然而,我有一种偷偷摸摸的怀疑,正确的索引或其他因素可能会对我的表现产生很大影响。我知道2000万行是很多行,但它太多了吗?
我对索引知之甚少,除了它们很重要。我试图将它们添加到名称和州字段中,我相信我成功了。
顺便说一下,我正在尝试添加一个唯一的ID字段,这就是我昨天的帖子。
所以,问题是:在MySql范围之外是否有2000万行?如果没有,我是否缺少一个索引或其他一些有助于更好地使用这2000万行的设置?我可以在所有列上放置索引并使其超快吗?
一如既往,提前谢谢......
以下是规格:
我的电脑是XP,运行WAMPSERVER,Win32 NTFS,Intel Duo Core,T9300 @ 2.50GHz,1.17 GHz,1.98 GB或RAM
DB:1个表,2000万行 表的大小是: 数据4.4演出,索引1.3演出,总计5.8演出
索引在“BUSINESS NAME”和“STATE”字段
上设置表格字段如下:
`BUSINESS NAME` TEXT NOT NULL,
`ADDRESS` TEXT NOT NULL,
`CITY` TEXT NOT NULL,
`STATE` TEXT NOT NULL,
`ZIP CODE` TEXT NOT NULL,
`COUNTY` TEXT NOT NULL,
`WEB ADDRESS` TEXT NOT NULL,
`PHONE NUMBER` TEXT NOT NULL,
`FAX NUMBER` TEXT NOT NULL,
`CONTACT NAME` TEXT NOT NULL,
`TITLE` TEXT NOT NULL,
`GENDER` TEXT NOT NULL,
`EMPLOYEE` TEXT NOT NULL,
`SALES` TEXT NOT NULL,
`MAJOR DIVISION DESCRIPTION` TEXT NOT NULL,
`SIC 2 CODE DESCRIPTION` TEXT NOT NULL,
`SIC 4 CODE` TEXT NOT NULL,
`SIC 4 CODE DESCRIPTION` TEXT NOT NULL
答案 0 :(得分:8)
一些答案:
2000万行完全在MySQL的能力范围内。我在一个表中工作的数据库超过5亿行。重组表可能需要数小时,但只要普通查询由索引辅助,普通查询就不是问题。
您的笔记本电脑已经过时,并且不能用作高规模的数据库服务器。进行表重组需要很长时间。较少的内存和通常较慢的笔记本电脑磁盘可能会限制您。您可能也使用MySQL的默认设置,这些设置适用于非常旧的计算机。
我建议不要为每个列使用TEXT
数据类型。对于大多数这些列,您没有理由需要TEXT
。
不要在每个列上创建索引,特别是如果您坚持使用TEXT
数据类型。除非您定义前缀索引,否则您甚至无法索引TEXT
列。通常,选择索引以支持特定查询。
根据上述内容,您可能还有许多其他问题,但在单个StackOverflow帖子中有太多内容无法涵盖。如果您打算使用数据库,您可能需要接受培训或阅读书籍 我推荐High Performance MySQL, 2nd Edition。
重新提出你的后续问题:
对于MySQL调优,这是一个很好的起点:http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
许多ALTER TABLE操作会导致表重组,这意味着基本上锁定表,使用所应用的更改制作整个表的副本,然后重命名新旧表并删除旧表。如果表非常大,这可能需要很长时间。
TEXT数据类型最多可以存储64KB,这对于电话号码或状态来说是过度的。我会使用CHAR(10)作为典型的美国电话号码。我会将CHAR(2)用于美国州。通常,使用最紧凑和节俭的数据类型,它支持给定列中所需的数据范围。
答案 1 :(得分:2)
这需要很长时间,因为你只有2GB内存和6GB数据/索引,这将迫使RAM和磁盘之间进行大量的交换。但是,你无能为力。
您可以尝试批量运行。
创建一个单独的空表,其中包含auto_increment列。然后一次插入一定数量的记录(例如,一次一个州)。这可能有助于它更快,因为你应该能够完全在内存中处理那些较小的数据集,而不是分页到磁盘。
如果它也在dba.stackexchange.com上,你可能会得到更好的回复。
答案 2 :(得分:0)
我相信硬件很好,但你需要更好地节省资源。
Db结构优化!
TEXT
!bigint unsigned
。必须解析和转换任何符号或alpha。varchar([32-256])
。mediumint unsigned
。enum('Male','Female')
int unsigned
enum('Alaska',...)
enum('Albania',...)
构建大型索引时,最快的方法是创建一个新表并执行INSERT INTO ... SELECT FROM ...
而不是ALTER TABLE ...
。
将State和Country字段更改为enum将大大减少索引大小。