[SQL] 테이블 행 수를 얻을 수있는 가장 효율적인 방법
SQL테이블 행 수를 얻을 수있는 가장 효율적인 방법
나는 현재 6 백만 행과 성장 데이터베이스를 가지고있다. 나는 현재 테이블에서 SELECT COUNT (ID)를 할; 내 사용자 수를 표시 할 수 있지만하기 위해 데이터베이스가 큰지고 난 수를 표시 할 수 있도록 제외한 그 모든 행을 저장할 필요가 없습니다. 나는 데이터베이스에 행의 대부분을 취소 할 수 있도록 표시하는 AUTO_INCREMENT 값을 선택하는 방법이 있나요? LAST_INSERT_ID ()를 사용하면 작동하지 않습니다.
해결법
-
==============================
1.그것은 단지 기록 (행)의 수를 얻기에 관하여 만약 내가 사용하는 것이 좋습니다 것입니다 :
그것은 단지 기록 (행)의 수를 얻기에 관하여 만약 내가 사용하는 것이 좋습니다 것입니다 :
SELECT TABLE_ROWS FROM information_schema.tables WHERE table_name='the_table_you_want' -- Can end here if only 1 DB AND table_schema = DATABASE(); -- See comment below if > 1 DB
(MySQL 용 적어도) 대신.
-
==============================
2.다음은 테이블의 다음 AUTO_INCREMENT 값을 찾을 수있는 가장 성능이 좋은 방법입니다. 그것은 잠재적으로 큰 INFORMATION_SCHEMA 데이터베이스 쿼리를 필요로하지 않기 때문에, 심지어 테이블의 데이터베이스 주택 수백만 빠르다.
다음은 테이블의 다음 AUTO_INCREMENT 값을 찾을 수있는 가장 성능이 좋은 방법입니다. 그것은 잠재적으로 큰 INFORMATION_SCHEMA 데이터베이스 쿼리를 필요로하지 않기 때문에, 심지어 테이블의 데이터베이스 주택 수백만 빠르다.
mysql> SHOW TABLE STATUS LIKE 'table_name'; // Look for the Auto_increment column
쿼리에서이 값을 검색해야하는 경우에는 다음 INFORMATION_SCHEMA 데이터베이스에 당신이 가야한다.
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'TableName';
-
==============================
3.이 시도
이 시도
이 SQL을 실행합니다 :
SHOW TABLE STATUS LIKE '<tablename>'
상기 AUTO_INCREMENT 필드의 값을 취득
-
==============================
4.나는 모르겠 음 하나는 다음을 제안하지 이유입니다. 이것은 단지 SQL (PHP의로 MYSQL_ASSOC를 사용하는 필요 없음)를 사용하여 AUTO_INCREMENT 값을 얻을 것이다 :
나는 모르겠 음 하나는 다음을 제안하지 이유입니다. 이것은 단지 SQL (PHP의로 MYSQL_ASSOC를 사용하는 필요 없음)를 사용하여 AUTO_INCREMENT 값을 얻을 것이다 :
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE TABLE_NAME = 'table'
-
==============================
5.직접 선택 쿼리를 작성하여 최대 번호를받을 경우 다음 기회 쿼리는 잘못된 값이 제공됩니다 수 있음. 예를 들면 테이블 5 개 레코드가있는 경우, 증가 ID는 6이 될 것이다, 그래서 나는 테이블이 최대 ID로 4 개 레코드가없는 (5)이 경우 4입니다 삭제 기록은 다음 증가 ID로 5 얻을 것이다 경우. 당신은 MySQL의 해상력 자체에서 정보를 얻을 수에 insted. 서면으로 PHP 코드를 다음
직접 선택 쿼리를 작성하여 최대 번호를받을 경우 다음 기회 쿼리는 잘못된 값이 제공됩니다 수 있음. 예를 들면 테이블 5 개 레코드가있는 경우, 증가 ID는 6이 될 것이다, 그래서 나는 테이블이 최대 ID로 4 개 레코드가없는 (5)이 경우 4입니다 삭제 기록은 다음 증가 ID로 5 얻을 것이다 경우. 당신은 MySQL의 해상력 자체에서 정보를 얻을 수에 insted. 서면으로 PHP 코드를 다음
<? $tablename = "tablename"; $next_increment = 0; $qShowStatus = "SHOW TABLE STATUS LIKE '$tablename'"; $qShowStatusResult = mysql_query($qShowStatus) or die ( "Query failed: " . mysql_error() . "<br/>" . $qShowStatus ); $row = mysql_fetch_assoc($qShowStatusResult); $next_increment = $row['Auto_increment']; echo "next increment number: [$next_increment]"; ?>
-
==============================
6.아이디 DESC LIMIT 1 캔 반환 최대 ID로 테이블 순서와 ID를 선택하지 증가 ID를 자동. 모두 몇 가지 조건이 다르다
아이디 DESC LIMIT 1 캔 반환 최대 ID로 테이블 순서와 ID를 선택하지 증가 ID를 자동. 모두 몇 가지 조건이 다르다
-
==============================
7.그런 다음 "상태 표시"에 대한 권한이없는 경우, 가장 좋은 방법은, 두 개의 트리거하고 억 개 기록 테이블의 행 수를 유지하는 새 테이블을 만드는 것입니다.
그런 다음 "상태 표시"에 대한 권한이없는 경우, 가장 좋은 방법은, 두 개의 트리거하고 억 개 기록 테이블의 행 수를 유지하는 새 테이블을 만드는 것입니다.
예:
TableA의 >> 억 개 기록 TableB의 >> 1 열 및 1 행
표 (삽입 트리거) 증가에 삽입 쿼리는 1 TableB의에 의해 행 값이있을 때마다 TableA의에 삭제 쿼리가있을 때마다 TableB의 1로, 감소시킵니다 행 값 (트리거 삭제)
-
==============================
8.INFORMATION_SCHEMA 제안 옆이 :
INFORMATION_SCHEMA 제안 옆이 :
SELECT id FROM table ORDER BY id DESC LIMIT 1
또한 매우 빠르게해야한다, (나는 AUTO_INCREMENT의 경우 수 있어야합니다 생각) id 필드에 인덱스 거기에 제공
-
==============================
9.
$next_id = mysql_fetch_assoc(mysql_query("SELECT MAX(id) FROM table")); $next_id['MAX(id)']; // next auto incr id
그것이 도움 바랍니다 :)
-
==============================
10.제어 장치
제어 장치
SomeNameModel::_getNextID($this->$table)
모델
class SomeNameModel extends CI_Model{ private static $db; function __construct(){ parent::__construct(); self::$db-> &get_instance()->db; } function _getNextID($table){ return self::$db->query("SHOW TABLE STATUS LIKE '".$table."' ")->row()->Auto_increment; } ... other stuff code }
-
==============================
11.이 답변 중에 꽤 잘 될 것 같다 없습니다. 나는 그들 모두를 시도했다. 여기 내 결과입니다.
이 답변 중에 꽤 잘 될 것 같다 없습니다. 나는 그들 모두를 시도했다. 여기 내 결과입니다.
Sending query: SELECT count(*) FROM daximation 91 Sending query: SELECT Auto_increment FROM information_schema.tables WHERE table_name='daximation' 96 Sending query: SHOW TABLE STATUS LIKE 'daximation' 98 Sending query: SELECT id FROM daximation ORDER BY id DESC LIMIT 1 97
여기에 스크린 샷입니다 : https://www.screencast.com/t/s8c3trYU
여기 내 PHP 코드는 다음과 같습니다
$query = "SELECT count(*) FROM daximation"; $result = sendquery($query); $row = mysqli_fetch_row($result); debugprint( $row[0]); $query = "SELECT Auto_increment FROM information_schema.tables WHERE table_name='daximation'"; $result = sendquery($query); $row = mysqli_fetch_row($result); debugprint( $row[0]); $query = "SHOW TABLE STATUS LIKE 'daximation'"; $result = sendquery($query); $row = mysqli_fetch_row($result); debugprint( $row[10]); $query = "SELECT id FROM daximation ORDER BY id DESC LIMIT 1"; $result = sendquery($query); $row = mysqli_fetch_row($result); debugprint( $row[0]);
-
==============================
12.당신은 단지 사용자 등록의 마지막 삽입 된 ID로 열라는 사용자 및 UPDATE를 가진 별도의 테이블에 레코드 또는 무엇을 만들 수 없습니다?
당신은 단지 사용자 등록의 마지막 삽입 된 ID로 열라는 사용자 및 UPDATE를 가진 별도의 테이블에 레코드 또는 무엇을 만들 수 없습니다?
그럼 그냥 간단한 쿼리로이 필드를 확인합니다.
그것은 거칠 수 있습니다하지만 그것은 완벽하게 작동합니다.
from https://stackoverflow.com/questions/933565/most-efficient-way-to-get-table-row-count by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 절에 의해 노동 조합 및 순서를 사용하여 (0) | 2020.03.24 |
---|---|
[SQL] SQL 문에 필드에서 앞의 0을 제거 (0) | 2020.03.24 |
[SQL] 교리 2의 .. IN 하위 쿼리를 수행 (0) | 2020.03.24 |
[SQL] 저장 프로 시저를 파라미터들의 배열을 전달 (0) | 2020.03.24 |
[SQL] 어떻게 아약스를 통해 여러 데이터 필드를 보내? [닫은] (0) | 2020.03.24 |