рдПрдХ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ Sqlite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп LIKE рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЕрдиреБрдХреВрд▓рди

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдиреЗ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Sqlite рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдереА (рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓реЗрдВ), рдПрдХ рд╢рдмреНрджрдХреЛрд╢ (рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА), рдареАрдХ рд╣реИ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдФрд░ рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдмрдВрдз (рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкреНрд░рд╡реЗрд╢)ред рдПрдХ рдЦреЛрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджрд░реНрдЬ рд╢рдмреНрдж рд╣реИред

рдЖрдзрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереА:

CREATE TABLE document ( id Int PRIMARY KEY NOT NULL, root_id Int, name Varchar(100), active Tinyint ); CREATE INDEX IDX_documentId ON document (id); CREATE INDEX IDX_documentName ON document (name); CREATE TABLE dictionary ( id Int PRIMARY KEY NOT NULL, word Varchar(100) NOT NULL ); CREATE INDEX IDX_dictionaryId ON dictionary (id); CREATE UNIQUE INDEX IDX_dictionaryWord ON dictionary (word ASC); CREATE TABLE document_index ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, document_id Int NOT NULL, word_id Int NOT NULL, FOREIGN KEY(document_id) REFERENCES document(id), FOREIGN KEY(word_id) REFERENCES dictionary(id) ); CREATE INDEX IDX_documentIndexId ON document_index (id); CREATE INDEX IDX_documentIndexDocId ON document_index (document_id); CREATE INDEX IDX_documentIndexWordId ON document_index (word_id); 

рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рдмреНрджреЛрдВ рд╡рд╛рд▓реЗ рдЪрдпрдирд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА:

 SELECT document.id, document.name FROM document INNER JOIN document_index on document_index.document_id=document.id INNER JOIN dictionary on dictionary.id=document_index.word_id WHERE dictionary.word LIKE @pQuery AND document.active = 1 AND document.root_id in (@pRoot1, @pRoot2, @pRoot3, @pRoot4, @pRoot5, @pRoot6, @pRoot7) LIMIT @First, @Count 

рдЖрдХрд╛рд░ рд╡рд┐рдЪрд▓рди ~ = 400K, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ ~ = 1K рдФрд░ document_index ~ = 500K рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдиреБрд░реЛрдз рдореЗрд░реЗ iPad 2 рдкрд░ рд▓рдЧрднрдЧ 30 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рд╛, рдЬреЛ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛ред

рдХреНрд╡реЗрд░реА рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ Sqlite3 рдореЗрдВ, рдЬрдм LIKE рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдирдВрдмрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдерд╛ред рдореИрдВ LIKE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рднреА рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛рддреНрдордХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рддрдм рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдЗрд╕рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╕рдВрдЪрд╛рд▓рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде LIKE рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐> = рдФрд░ <+ рдпрд╛рдпрд╛ рд╡рд░реНрдг (рд╢рдмреНрдж рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдмреЗрд╕ рд╢рдмреНрдж рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реЛ рддреЛ)ред

 /*  */ dictionary.word LIKE '%' /*  */ dictionary.word >= '' AND dictionary.word < '' 


рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ 'рдЕрдмрдХрди' рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╢рдмреНрдж рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рдХреЗрд╡рд▓ 0.5 рд╕реЗрдХрдВрдб рд╣реИ! рдмреЗрд╢рдХ, рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЦреЛрдЬ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЕрд░реНрдерд╛рддред рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рдФрд░ 'рдЕрдмрдХрд╛рди' рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред

Source: https://habr.com/ru/post/In165663/


All Articles