为子字符串查询优化Mysql表索引

为子字符串查询优化Mysql表索引,sql,mysql,database,indexing,Sql,Mysql,Database,Indexing,我有一个问题要问你们 我在MySQL中有一个非常大的表(约1亿条记录),其中包含有关文件的信息。我对它所做的大多数查询都涉及对文件路径列的子字符串操作 以下是ddl表: CREATE TABLE `filesystem_data`.`$tablename` ( `file_id` INT( 14 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `file_name` VARCHAR( 256 ) NO

我有一个问题要问你们

我在MySQL中有一个非常大的表(约1亿条记录),其中包含有关文件的信息。我对它所做的大多数查询都涉及对文件路径列的子字符串操作

以下是ddl表:

CREATE TABLE `filesystem_data`.`$tablename` (
                `file_id` INT( 14 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
                `file_name` VARCHAR( 256 ) NOT NULL ,
                `file_share_name` VARCHAR ( 100 ) NOT NULL,
                `file_path` VARCHAR( 900 ) NOT NULL ,
                `file_size` BIGINT( 14 ) NOT NULL ,
                `file_tier` TINYINT(1) UNSIGNED NULL, 
                `file_last_access` DATETIME NOT NULL ,
                `file_last_change` DATETIME NOT NULL ,
                `file_creation` DATETIME NOT NULL ,
                `file_extension` VARCHAR( 50 ) NULL ,
                INDEX ( `file_path`, `file_share_name` ) 
                ) ENGINE = MYISAM 
             };
例如,我有一行文件路径如下:

'\\Server100\share2\Home\Zenshai\My Documents\'
我将使用以下内容提取用户名(本例中为Zenshai):

SELECT substring_index(substring_index(fp.file_path,'\\',6),'\\',-1) as Username
FROM (SELECT '\\\\Server100\\share2\\Home\\Zenshai\\My Documents\\' as file_path) fp
它变得有点难看,但这不是我现在真正关心的

我想要得到的建议是,什么样的索引(如果有的话)可以帮助加速此表上的这些类型的查询。我们也欢迎任何其他建议

谢谢


注:尽管表格变得非常大,但仍有足够的空间用于索引。

您不能在当前表格设计中使用索引

您可以添加一个名为
USERNAME
的列,在
INSERT/UPDATE
触发器中填入您在
SELECT
中使用的表达式,然后在此列上搜索

p.S.只是好奇,你的服务器上真的有
100个mln+
文件吗?

我会创建一个很小的(列,而不是记录计数)子表,该子表会将文件路径拆分并按如下方式存储:

FK_TO_PARENT    PATH_PART
1               Server100
1               share2
1               Home
1               Zenshai
1               My Documents

然后只索引路径部分。当然,如果父表超过1亿条,那么这将进入数十亿条记录。

它不仅仅是一台服务器,而且根本不是“我的”。是的,事实上还有很多。另外,谢谢你的回答。我会试试看,这可能值得花额外的时间来插入更快的查询。