给 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 2020-04-08 19:38:28 +08:00
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 2020-04-08 19:58:55 +08:00
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 4
我看到这个表的心情就是楼主的头像
|
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
你们已经把楼主吓得换头像了
|