mySQL中带REPLACE函数的索引列
这可能是个愚蠢的问题 我需要在join和where中大量使用此功能: 由于位数据与其他公司的系统不一致 这是否可能,或者任何其他数据库类型都可以使用REPLACE函数对列进行索引?例如:mySQL中带REPLACE函数的索引列,mysql,sql,replace,indexing,myisam,Mysql,Sql,Replace,Indexing,Myisam,这可能是个愚蠢的问题 我需要在join和where中大量使用此功能: 由于位数据与其他公司的系统不一致 这是否可能,或者任何其他数据库类型都可以使用REPLACE函数对列进行索引?例如: ALTER TABLE `table_a` ADD INDEX ( REPLACE(`column_1`, '-', '') ) ; 数据库类型:MyISAM在MySQL中没有这样的东西 如果您想格式化一些值以加速索引搜索,您可能需要使用一些触发器。事实上,今天早上我回答了几乎相同的问题:请参阅类似的示例 在
ALTER TABLE `table_a` ADD INDEX ( REPLACE(`column_1`, '-', '') ) ;
数据库类型:MyISAM在MySQL中没有这样的东西
如果您想格式化一些值以加速索引搜索,您可能需要使用一些触发器。事实上,今天早上我回答了几乎相同的问题:请参阅类似的示例
在您的情况下,这将导致类似的情况:
CREATE TABLE `table_a`(`column_1` VARCHAR(255), ... ,
`column_1_fmt` VARCHAR(255),
INDEX(`column_1_fmt`));
CREATE TRIGGER ins_table_a BEFORE INSERT ON `table_a`
FOR EACH ROW
SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');
CREATE TRIGGER upd_table_a BEFORE UPDATE ON `table_a`
FOR EACH ROW
SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');
现在,您将使用列_1_fmt搜索具有所需格式的值/连接值
关于您的特殊需要,请从某种序列号/参考号中删除破折号?。也许你应该扭转这个问题。将这些值存储为无破折号的标准形式。并在选择的时间添加所需的破折号。为什么表a.column\u 1=表b.column\u 2在这里不起作用?我在某个地方读到,在变量上使用函数不使用索引,也不能在函数上创建索引,因为函数输出未确定,所以,我的答案是no@AshwinMukhija也许他的数据更多——来自其他公司db,然后他们有…@Sumit Gupta是的,确切地说,表格来自不同的公司,Sylvain建议的触发器将执行刻度,thx
CREATE TABLE `table_a`(`column_1` VARCHAR(255), ... ,
`column_1_fmt` VARCHAR(255),
INDEX(`column_1_fmt`));
CREATE TRIGGER ins_table_a BEFORE INSERT ON `table_a`
FOR EACH ROW
SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');
CREATE TRIGGER upd_table_a BEFORE UPDATE ON `table_a`
FOR EACH ROW
SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');