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

我对你们有一个MySQL索引问题.

我在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 
             };

因此,例如生病有一个file_path这样的行:

'\\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

这有点丑陋,但这不是我现在真正关心的问题.

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

谢谢.

PS.尽管表非常大,但仍有足够的空间用于索引.

解决方法:

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

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

P. S.很好奇,您的服务器上确实有1亿个文件?

上一篇:通过子字符串分配Python字典


下一篇:python-一百万次访问熊猫数据-需要提高效率