回答

收藏

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

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

我对你有一个MySQL索引问题。
6 C( P# L% ?& r我在MySQL有一个非常大的表(约1亿条记录),包括相关文件的信息。我执行的大部分查询都涉及到文件路径列上的子字符串操作。
; g- _- ^. j' X. D/ N* J这是表ddl:
3 K* q5 w- x( q* X/ I3 m( {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,例如:+ \  k5 E# f3 @0 W
'\\Server100\share2\Home\Zenshai\My Documents\'然后,我将使用类似以下内容提取用户名(在此示例中为Zenshai)
9 S, ~( u& G# R# F+ r5 j2 @- ]2 cSELECT substring_index(substring_index(fp.file_path,'\\',6),'\\',-1) as UsernameFROM (SELECT '\\\\Server100\\share2\\Home\\Zenshai\\My Documents\\' as file_path) fp这有点丑,但这不是我现在真正关心的问题。/ y; F; }  W6 ^. O
我想要一些建议,什么样的索引(如果有的话)可以帮助加快这些类型的查询。欢迎任何其他建议。
$ {" D6 x1 @; p. x! X8 u谢谢。1 V, }8 L/ l! ^3 s. |( l# U
PS。尽管表非常大,但仍有足够的空间用于索引。
) m# c9 _" e4 [                                                               
* {% ~5 {; T2 j, e    解决方案:                                                               
. a, k5 g( W* M3 h1 M5 ?* o. d                                                                在当前的表设计中,您不能使用索引。3 Q1 W( I3 H- D, o; O
您可以添加列名USERNAME,在INSERT/UPDATE在触发器中填充用的表达式SELECT,然后在这个列中搜索。8 R( f) `3 o& L* F9 A/ n1 d  _
PS    只是好奇,你100 mln 服务器上有文件吗?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则