
给 productName 列创建索引,创建前这个表已经有 78 万条数据
mysql> select count(id) from products; +-----------+ | count(id) | +-----------+ | 780097 | +-----------+ | products | CREATE TABLE `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `productCode` text NOT NULL COMMENT '产品代码', `productName` text NOT NULL COMMENT '产品名称', `productLine` text NOT NULL COMMENT '产品线', `productScale` text NOT NULL, `productVendor` text NOT NULL, `productDescription` text NOT NULL, `quantityInStock` smallint(6) NOT NULL COMMENT '库存', `buyPrice` decimal(10,2) NOT NULL COMMENT '价格', `MSRP` decimal(10,2) NOT NULL COMMENT '建议零售价', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=760001 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC | 创建索引命令(卡这 2 个多小时了,这是在创建中还是已经凉了??):
mysql> create index product_index on products (productName(64)); 回复一下各位,仅仅是自学测试一下,不是实际项目当中,所以字段定义确实不严谨
索引也创建完了,耗时7个多小时
Query OK, 780097 rows affected (7 hours 19 min 11.69 sec) 1 qiayue PRO productName 是 text 类型?大部分几个字符? 另外产品名称建所以没多大意义吧? |
2 jugelizi 2020-04-08 19:38:38 +08:00 via iPhone 稳妥的方案是新建临时表带索引 导入数据再覆盖原始的 |
3 xcstream 2020-04-08 19:42:30 +08:00 text 类型 有点大 |
4 privil 2020-04-08 19:44:54 +08:00 再开一个连接看看执行状态啊 |
6 version 2020-04-08 19:47:52 +08:00 productName 索引不能用 text 呢. 而且用 VARCHAR 建立索引 200 字符长度以上都直接报错呢 VARCHAR(30) 以内都很大了. 而且字符串做索引.本来性能就不算好. |
8 Egfly 2020-04-08 19:51:29 +08:00 这索引没啥意义吧。不如上 es |
9 xuanbg 2020-04-08 19:53:06 +08:00 text 类型的字段不适合直接做索引。。。一般这种内容我都用 es 做索引,查到 id 后再读数据库。 |
10 yangbin9317 2020-04-08 19:53:57 +08:00 因为 Innodb 的没有确定的哈希索引,只有自适应哈希索引,我觉得可以建一个字段叫 hash 里面存 text 的 hash,然后在 hash 上建索引(因为 hash 比较短)查询的时候先判断 hash,hash 一样再判断 text 。 |
11 qiayue PRO 10240 个字符 这么长建索引干嘛?你想做搜索? 不是这样干的 |
12 glacer 2020-04-08 19:59:57 +08:00 show processlist 看下是不是链接状态是 waiting for metalock |
13 sjzzz 2020-04-08 20:23:11 +08:00 .....为什么全是 text 。这表设计的很有问题啊 |
14 jay4497 2020-04-08 20:49:43 +08:00 不知道你磁盘空间有没有剩余有 50%+,如果没有的话,有可能是空间不足的问题。。。 |
15 wangyzj 2020-04-08 21:28:48 +08:00 全是 text text 做索引。。。。咋想的 |
16 kiracyan 2020-04-08 21:32:23 +08:00 这数据库设计的也是绝了 |
17 mumbler 2020-04-08 21:34:26 +08:00 via Android 啥产品啊,名称要用 text |
18 ArJun 2020-04-08 21:35:21 +08:00 索引千万条,但是绝不能用 text 做索引 |
19 ytmsdy 2020-04-08 21:36:43 +08:00 大哥你 productDescription 用 text 类型表示理解,但是为什么 productCode,productName,productLine 也用 text ? |
20 metrxqin 2020-04-08 23:21:21 +08:00 via Android 竟然用 MYISAM 引擎,你怎么保证库存数据一致性的? |
21 ragnaroks 2020-04-09 00:19:48 +08:00 槽点太多,就说一个,价格应该使用最低计量单位做缩放,而不是使用"高精度"类型; 10 元 8 角 7 分,正确的存储方式应该是 1087 分,而不是 10.87 元 |
22 swulling 2020-04-09 02:36:03 +08:00 via iPhone 这个表结构很惊人,这么多字段里面,我看也就两个字段是设置合理的。 |
23 tsui 2020-04-09 06:44:09 +08:00 @ragnaroks “正确的存储方式应该是 1087 分,而不是 10.87 元” 你这是把 Java 里头用 Big Decimal 跟 MySQL 弄混了吧?这个估计是少数这个 schema 没错的地方了。 https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html The DECIMAL and NUMERIC types store exact numeric data values. |
24 sadfQED2 2020-04-09 08:12:35 +08:00 我看到这个表的心情就是楼主的头像 |
25 starcraft 2020-04-09 08:38:14 +08:00 你这个 create 语句实在槽点太多。 |
26 SjwNo1 2020-04-09 08:50:16 +08:00 text 太大,可以但没必要 |
27 b821025551b 2020-04-09 09:05:15 +08:00 @ragnaroks #21 用 decimal 不算错误,在数据库层面是完全没问题的,只是应用层要稍微注意而已。(虽然我也用 int ) |
28 Ianchen 2020-04-09 09:23:22 +08:00 没用过 MyISAM 引擎, 这个引擎能在 text 上建索引吗? 不会报错? |
29 scnace 2020-04-09 09:43:03 +08:00 via Android 给这种字段加索引 建议加一个 hash(ProductName)的新字段 然后给这个字段加索引 |
30 toxicant 2020-04-09 09:45:45 +08:00 你这个头像和标题,绝配 |
31 nanguaboy 2020-04-09 10:12:58 +08:00 这个 text 类型不能理解 |
32 marcushbs 2020-04-09 10:37:53 +08:00 ORM 可以有效避免初学者 create table 时的随意,熟练之后当然随便手写 |
33 zencoding 2020-04-09 10:42:25 +08:00 DBA: 把写 DDL 的人拉出去枪毙 5 分钟 |
34 iceecream 2020-04-09 10:58:39 +08:00 咋全是 text ? text 这种不是 mysql 的强项,换 Es 比较快 |
35 crist 2020-04-09 11:15:28 +08:00 文字都是 text 类型,LZ 也是牛逼! |
36 jjianwen68 2020-04-09 11:23:52 +08:00 网上搜一下 db 的最佳实践学习学习 |
37 xpresslink 2020-04-09 11:27:37 +08:00 @crist 估计楼主是从 sqlite 转过来的。 |
38 ArtIsPatrick 2020-04-09 12:16:08 +08:00 via iPhone 建议重新建表,好好设计一下字段类型 |
39 huayumo 2020-04-09 12:23:36 +08:00 哈哈哈,做测试的,这字段也够牛逼的,从来不敢想, |
40 jon 2020-04-09 16:11:36 +08:00 你怎么自学的这字段太惊悚了 |
41 sdot96 2020-04-09 19:41:01 +08:00 via Android 换数据库引擎,然后建全文索引啊 |
42 EminemW 2020-04-10 01:33:58 +08:00 @b821025551b 应用层应该用啥,我用的是 Big Decimal |
43 zhuzhibin 2020-04-10 09:30:41 +08:00 via iPhone 卡死应该是因为建立索引 mysql 进程卡死了 |
44 daya 2020-04-10 09:59:04 +08:00 你们已经把楼主吓得换头像了 |