Hoi,
Ik probeer een query sneller te krijgen door de columns die ik in m'n WHERE clause heb staan te indexeren. Daarbij heb ik een aantal probleempjes:
- ik wil een zoekfunctie op 2 columns toepassen, op bijv. Firstname en Lastname: "SELECT Fields FROM Users WHERE Firstname LIKE 'string%' OR Lastname LIKE 'string%'". Ik heb beide columns zowel tezamen als individueel geindexeerd, maar de query duurt ca. 4 secs (zonder indexering ca. 6 secs). De MySQL documentatie geeft aan dat de index niet gebruikt wordt in een WHERE clause met OR op 2 verschillende columns (5.4.5 Multiple Column Indexes). Is er een andere manier om toch op 2 columns via OR te zoeken en toch gebruik te maken van indexes?
- wanneer ik de kolom Lastname indexeer en vervolgens een query uitvoer a la "SELECT * FROM Users WHERE Lastname LIKE 'string%'" dan duurt m'n query ca. 0.02 secs terwijl een een index op bijv. Firstname en dan een query a la "SELECT * FROM Users WHERE Firstname LIKE 'string%'" een duur heeft van ca 2 secs. Het zijn precies dezelfde column types, staan in dezelfde tabel, indextype is ook hetzelfde, aantal results ook hetzelfde....
- wat ik niet begrijp uit de documentatie zijn termen als "index prefix" en "...any index that doesn't span all AND levels in the WHERE clause is not used..." ... ze laten OR dus al helemaal buiten beschouwing?? Het komt toch in de praktijk heel vaak voor dat je in meerdere columns wilt zoeken naar een string (search engines) dus moet daar toch een oplossing voor zijn??
-- Jeroen
Ik probeer een query sneller te krijgen door de columns die ik in m'n WHERE clause heb staan te indexeren. Daarbij heb ik een aantal probleempjes:
- ik wil een zoekfunctie op 2 columns toepassen, op bijv. Firstname en Lastname: "SELECT Fields FROM Users WHERE Firstname LIKE 'string%' OR Lastname LIKE 'string%'". Ik heb beide columns zowel tezamen als individueel geindexeerd, maar de query duurt ca. 4 secs (zonder indexering ca. 6 secs). De MySQL documentatie geeft aan dat de index niet gebruikt wordt in een WHERE clause met OR op 2 verschillende columns (5.4.5 Multiple Column Indexes). Is er een andere manier om toch op 2 columns via OR te zoeken en toch gebruik te maken van indexes?
- wanneer ik de kolom Lastname indexeer en vervolgens een query uitvoer a la "SELECT * FROM Users WHERE Lastname LIKE 'string%'" dan duurt m'n query ca. 0.02 secs terwijl een een index op bijv. Firstname en dan een query a la "SELECT * FROM Users WHERE Firstname LIKE 'string%'" een duur heeft van ca 2 secs. Het zijn precies dezelfde column types, staan in dezelfde tabel, indextype is ook hetzelfde, aantal results ook hetzelfde....
- wat ik niet begrijp uit de documentatie zijn termen als "index prefix" en "...any index that doesn't span all AND levels in the WHERE clause is not used..." ... ze laten OR dus al helemaal buiten beschouwing?? Het komt toch in de praktijk heel vaak voor dat je in meerdere columns wilt zoeken naar een string (search engines) dus moet daar toch een oplossing voor zijn??
-- Jeroen