回答

收藏

如何从存储过程创建索引或在MySQL中的每个表上创建索引?

技术问答 技术问答 161 人阅读 | 0 人回复 | 2023-09-12

到目前为止,我已经尝试了两件事,以及他们的错误消息:! i% z' u+ d5 o+ T; v2 F1 v
DELIMITER //CREATE PROCEDURE createModifiedIndex(t varchar(256))  BEGIN    declare idx varchar(256)DECLARE i int;    declare makeIndexSql varchar(256)set idx = concat('idx_',t,'_modified_on     set i = (select count(*) from INFORMATION_SCHEMA.STATISTICS where table_name = t and index_name = idx);    if i > 0 then        set makeIndexSql = concat('create index ',idx,' on ',t,' (modified_on);         prepare stmt from makeIndexSql;        execute stmt;    end if;  END //DELIMITER ;call createModifiedIndex ('ACHDebitFrequencies');call createModifiedIndex ...第5行的错误1064(42000):您的SQL语法错误;与你一起检查MySQL以服务器版本对应的手册为准’makeIndexSql附近使用正确的语法;执行stmt;- n9 B5 o7 E; X7 }  I" }- ~" z
万一; 在第10行结束
' Y, k2 \" l: E# P4 A
这是另一种不同的尝试,但因为MySQL不允许在存储过程之外进行IF / THEN而且不能正常工作。3 G1 B( d# R% l% s. E
set @i = (select count(*) from INFORMATION_SCHEMA.STATISTICS where table_name = 'ACHDebitFrequencies' and index_name = 'idx_ACHDebitFrequencies_modified_on');if @i > 0 then begin        create index 'idx_ACHDebitFrequencies_modified_on' on ACHDebitFrequencies (modified_on);end;end if;...1064(42000)第三行错误:你的SQL语法错误;与你一起检查MySQL以服务器版本对应的手册为准’if @i>
$ x4 G3 S9 _; U( g1 x在0附近使用正确的语法,然后在第一行开始ACHD上创建索引’idx_ACHDebitFrequencies_modified_on’
* Z1 t$ P  j1 H: E" x- G
版本mysql-5.1.62-r10 o0 B/ C- W5 E- ?" ^
                                                                # i: q' V$ H6 M8 h6 V5 {
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则