表統(tǒng)計(jì)信息是數(shù)據(jù)庫(kù)基于成本的優(yōu)化器最重要的參考信息;統(tǒng)計(jì)信息不準(zhǔn)確,優(yōu)化器可能給出不夠優(yōu)化的執(zhí)行計(jì)劃或者是錯(cuò)誤的執(zhí)行計(jì)劃。對(duì)統(tǒng)計(jì)信息的計(jì)算分為非持久化統(tǒng)計(jì)信息(實(shí)時(shí)計(jì)算)與持久化統(tǒng)計(jì)信息。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了祥云免費(fèi)建站歡迎大家使用!
非持久化統(tǒng)計(jì)信息
統(tǒng)計(jì)信息沒(méi)有保存在磁盤(pán)上,而是頻繁的實(shí)時(shí)計(jì)算統(tǒng)計(jì)信息;
每次對(duì)表的訪(fǎng)問(wèn)都會(huì)重新計(jì)算其統(tǒng)計(jì)信息;
假設(shè)針對(duì)一張大表的頻繁查詢(xún),那么每次都要重新計(jì)算統(tǒng)計(jì)信息,很耗費(fèi)資源。
持久化統(tǒng)計(jì)信息
把一張表在某一時(shí)刻的統(tǒng)計(jì)信息值保存在磁盤(pán)上;
避免每次查詢(xún)時(shí)重新計(jì)算;
如果表更新不是很頻繁,或者沒(méi)有達(dá)到 MySQL 必須重新計(jì)算統(tǒng)計(jì)信息的臨界值,可直接從磁盤(pán)上獲??;
即使 MySQL 服務(wù)重啟,也可以快速的獲取統(tǒng)計(jì)信息值;
統(tǒng)計(jì)信息的持久化可以針對(duì)全局設(shè)置也可以針對(duì)單表設(shè)置。
接下來(lái),詳細(xì)說(shuō) MySQL 統(tǒng)計(jì)信息如何計(jì)算,何時(shí)計(jì)算,效果評(píng)估等問(wèn)題。在 MySQL Server 層來(lái)控制是否自動(dòng)計(jì)算統(tǒng)計(jì)信息的分布,并且來(lái)決策是持久化還是非持久化。
首先要?jiǎng)?chuàng)建庫(kù) ;
mysql CREATE DATABASE?test1;
mysql use test1;
2.創(chuàng)建表
mysql CREATE TABLE tab1(
- id INT? NOT NULL AUTO_INCREMENT,
- name VARCHAR(32) NOT NULL,
- countrycode VARCHAR(40) NOT NULL,
- population VARCHAR(40) NOT NULL,
- gnp VARCHAR(32) NOT NULL,
- language VARCHAR(32) NOT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
1、使用 create table 語(yǔ)句可完成對(duì)表的創(chuàng)建, create table 的創(chuàng)建形式:
create table 表名稱(chēng)(列聲明);
以創(chuàng)建 people 表為例, 表中將存放 學(xué)號(hào)(id)、姓名(name)、性別(sex)、年齡(age) 這些內(nèi)容:
create table people(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null
);
其中,auto_increment就可以使Int類(lèi)型的id字段每次自增1。
2、向表中插入數(shù)據(jù)使用insert 語(yǔ)句。
insert 語(yǔ)句可以用來(lái)將一行或多行數(shù)據(jù)插到數(shù)據(jù)庫(kù)表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
其中 [] 內(nèi)的內(nèi)容是可選的, 例如, 要給上步中創(chuàng)建的people 表插入一條記錄, 執(zhí)行語(yǔ)句:
insert into people(name,sex,age) values( "張三", "男", 21 );
3、想要查詢(xún)是否插入成功,可以通過(guò)select 查詢(xún)語(yǔ)句。形式如下:
select * from people;
擴(kuò)展資料:
當(dāng)mysql大批量插入數(shù)據(jù)的時(shí)候使用insert into就會(huì)變的非常慢,?mysql提高insert into 插入速度的方法有三種:
1、第一種插入提速方法:
如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)已經(jīng)很多(幾百萬(wàn)條), 那么可以?加大mysql配置中的 bulk_insert_buffer_size,這個(gè)參數(shù)默認(rèn)為8M
舉例:bulk_insert_buffer_size=100M;
2、第二種mysql插入提速方法:
改寫(xiě)所有 insert into 語(yǔ)句為?insert?delayed into
這個(gè)insert delayed不同之處在于:立即返回結(jié)果,后臺(tái)進(jìn)行處理插入。
3、第三個(gè)方法: 一次插入多條數(shù)據(jù):
insert中插入多條數(shù)據(jù),舉例:
insert into table values('11','11'),('22','22'),('33','33')...;
創(chuàng)建MySQL數(shù)據(jù)表需要以下信息:
表名
表字段名
定義每個(gè)表字段
語(yǔ)法:
以下為創(chuàng)建MySQL數(shù)據(jù)表的SQL通用語(yǔ)法:
CREATE?TABLE?table_name?(column_name?column_type);
以下例子中我們將在 RUNOOB 數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表runoob_tbl:
runoob_tbl(
runoob_id?INT?NOT?NULL?AUTO_INCREMENT,
runoob_title?VARCHAR(100)?NOT?NULL,
runoob_author?VARCHAR(40)?NOT?NULL,
submission_date?DATE,
PRIMARY?KEY?(?runoob_id?)
);
注意
如果你不想字段為?NULL?可以設(shè)置字段的屬性為?NOT NULL, 在操作數(shù)據(jù)庫(kù)時(shí)如果輸入該字段的數(shù)據(jù)為NULL?,就會(huì)報(bào)錯(cuò)。
AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會(huì)自動(dòng)加1。
PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來(lái)定義主鍵,列間以逗號(hào)分隔。
通過(guò)命令提示符創(chuàng)建表
通過(guò) mysql 命令窗口可以很簡(jiǎn)單的創(chuàng)建MySQL數(shù)據(jù)表。你可以使用 SQL 語(yǔ)句?CREATE TABLE?來(lái)創(chuàng)建數(shù)據(jù)表。
實(shí)例
以下為創(chuàng)建數(shù)據(jù)表 runoob_tbl 實(shí)例:
root@host#?mysql?-u?root?-p
Enter?password:*******
mysql?use?RUNOOB;
Database?changed
mysql?CREATE?TABLE?runoob_tbl(
-?runoob_id?INT?NOT?NULL?AUTO_INCREMENT,
-?runoob_title?VARCHAR(100)?NOT?NULL,
-?runoob_author?VARCHAR(40)?NOT?NULL,
-?submission_date?DATE,
-?PRIMARY?KEY?(?runoob_id?)
-?);
Query?OK,?0?rows?affected?(0.16?sec)
mysql
注意:MySQL命令終止符為分號(hào) (;) 。
使用PHP腳本創(chuàng)建數(shù)據(jù)表
你可以使用PHP的 mysql_query() 函數(shù)來(lái)創(chuàng)建已存在數(shù)據(jù)庫(kù)的數(shù)據(jù)表。
該函數(shù)有兩個(gè)參數(shù),在執(zhí)行成功時(shí)返回 TRUE,否則返回 FALSE。
語(yǔ)法
bool?mysql_query(?sql,?connection?);
sql ? ? 必需。規(guī)定要發(fā)送的 SQL 查詢(xún)。注釋?zhuān)翰樵?xún)字符串不應(yīng)以分號(hào)結(jié)束。 ?
connection ? ?可選。規(guī)定 SQL 連接標(biāo)識(shí)符。如果未規(guī)定,則使用上一個(gè)打開(kāi)的連接。 ?
實(shí)例
以下實(shí)例使用了PHP腳本來(lái)創(chuàng)建數(shù)據(jù)表:
html
head
meta?charset="utf-8"?
title創(chuàng)建?MySQL?數(shù)據(jù)表/title
/head
body
?php
$dbhost?=?'localhost:3036';
$dbuser?=?'root';
$dbpass?=?'rootpassword';
$conn?=?mysql_connect($dbhost,?$dbuser,?$dbpass);
if(!?$conn?)
{
die('連接失敗:?'?.?mysql_error());
}
echo?'連接成功br?/';
$sql?=?"CREATE?TABLE?runoob_tbl(?".
"runoob_id?INT?NOT?NULL?AUTO_INCREMENT,?".
"runoob_title?VARCHAR(100)?NOT?NULL,?".
"runoob_author?VARCHAR(40)?NOT?NULL,?".
"submission_date?DATE,?".
"PRIMARY?KEY?(?runoob_id?));?";
mysql_select_db(?'RUNOOB'?);
$retval?=?mysql_query(?$sql,?$conn?);
if(!?$retval?)
{
die('數(shù)據(jù)表創(chuàng)建失敗:?'?.?mysql_error());
}
echo?"數(shù)據(jù)表創(chuàng)建成功\n";
mysql_close($conn);
?
/body
/html
CREATE DATABASE cookbook; 創(chuàng)建一個(gè)叫“cookbook”的數(shù)據(jù)庫(kù)
USE cookbook; 使用cookbook這個(gè)數(shù)據(jù)庫(kù)
CREATE TABLE limbs (thing VARCHAR(20),legs INT,arms INT); 創(chuàng)建表“l(fā)imbs”其中包括thing,legs,aems 字段
創(chuàng)建表的命令是 CREATE TABLE 表名稱(chēng)
后面括號(hào)里的內(nèi)容是表中字段的屬性