나는 1 억권이 넘는 거대한 테이블을 가지고 있습니다. 해당 테이블의 형식은 다음과 같이이다 :내 테이블의 색인 생성
id (AUTO_INCREMENT) - main key | username VARCHAR(100) | email VARCHAR(100) | ip VARCHAR(30) | hash VARCHAR(150) | salt VARCHAR(100)
나는 색인 아주 새로운 오전과 내가이 쿼리를 실행했을 때 나는 잠재력을 실현 :
"SELECT * FROM users WHERE id = 1000000;"
쿼리는 경우 반면 번개 속도로 데이터를 공급을
"SELECT * FROM users WHERE email = '[email protected]';"
그것은 결과를 가져 분 이상 걸릴 것이라고, 나는 테이블이 인덱싱되지 않기 때문에이 알고 : 나는 예를 들어 다른 쿼리를 실행합니다. 다음과 같이 나는 테이블에 대해 실행해야 할
쿼리는 다음과 같습니다
"SELECT * FROM users WHERE INSTR('email', '[email protected]');"
및
"SELECT * FROM users WHERE INSTR('username', 'testuser');"
내가 제공 할 수있는 일부 thurther 정보를 사용자 이름과 이메일 열이 고유하지 않은 것입니다 . 그리고 컬럼을 만들 때 "DEFAULT NULL"또는 "NOT NULL"일 수 있는지 명시하지 않았습니다.
이 테이블을 인덱싱하는 가장 좋은 방법은 위 쿼리를 실행할 수 있는지 궁금합니다. Iv'e는 연구를 시도했지만 조금 혼란 스럽습니다.
오, 또 하나주의 할 점은, 내가 사용하는 데이터베이스는 mariadb이고 백엔드는 innodb입니다.
정보를 제공해 주셔서 감사합니다.저는 150 자 정도의 해시를 가지고 있습니다 : P,하지만 ip와 salt는 고려할 것입니다. 또한 %% 쿼리가 INSTR보다 더 이상한 결과를 가져 오지 못하기 때문에 INSTR을 사용하기 시작했습니다. 나는 어떤 점에서 그것에 대해 좀 더 살펴야 할 것이다. 사용자 이름과 전자 메일에 대한 색인을 추가 할 수 있었고 INSTR이 영향을받지 않았으며 색인을 사용해야 할 때 어떤 결과도 가져 오지 않았다고 생각했습니다. 그래서 나는 쿼리가 왜 결과를 덜 가져 오는 지 알아 내야 할 것 같아요. 당신이 그 방향으로 나를 지적 할 수 있다면, 나는 그것을 감사 할 것입니다. – niftysql