兄弟,primary key是主鍵,每個表只能有一個主鍵,而且數據是唯一的。\x0d\x0a可以這樣寫:\x0d\x0aCREATE TABLE IF NOT EXISTS `".$ctb_name."` (\x0d\x0a `id` INT(9) NOT NULL AUTO_INCREMENT PRIMARY KEY,\x0d\x0a `keyid` VARCHAR(20) NOT NULL,\x0d\x0a `key` VARCHAR(20) NOT NULL,\x0d\x0a `stauts` BOOL NOT NULL DEFAULT'0',\x0d\x0aindex `idx_status`(`status`)\x0d\x0a )ENGINE = MYISAM DEFAULT CHARSET=utf8;\x0d\x0a不過,status是bool類型的字段,只有true和false,區分度太低,沒有必要加索引。\x0d\x0a\x0d\x0a索引目的是為了使查詢更快,區分度小的時候不如全表掃描。
創新互聯專業為企業提供芒市網站建設、芒市做網站、芒市網站設計、芒市網站制作等企業網站建設、網頁設計與制作、芒市企業網站模板建站服務,十余年芒市做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
select (*) from tb_name where create_time xxx;
最終得知是因為這個表數據行數已經超過 一千萬了,然后create_time字段又沒有索引 。
那解決辦法肯定是加索引嘍。
但是這個表是一直在線上運行,很重要和業務部分。如果給千萬級的大表在線加索引 ,肯定會卡死。
然后就搜羅了一大筐解決方案,比如 在線無鎖加索引使用
ALTER TABLE tbl_name ADD PRIMARY (column), ALGORITHM=INPLACE, LOCK=NONE;
后來才發現,這個特性是 Mysql 5.6 以后才支持,然而我們的mysql用的是5.5版本
最后在 《高性能Mysql》一書中看到,可在通過 “影子拷貝”來解決,
就是 先創建一張和源表無關的新表,然后通過重命名和刪表操作交換兩張表;
當給新表加完索引后,最上面那條查詢直接就是0.0002s
場景:在給一張有幾萬條記錄的表添加索引時,進度非常慢,導致其它查詢無法進行
處理方式:
使用Navicat的命令行模式,執行以下命令:
show processlist;
這時會看到有哪些線程正在執行,也可以查看鎖表的線程。你會發現alter table * add key ****那個線程狀態是Waiting for table metadata lock,后面有個這個表的所有操作都是這個狀態,很明顯是這條加索引的語句把表給鎖了。
查看線程ID,執行
kill 線程ID
這樣被鎖住的表就能立即被使用了。
由此得出一個結論,當一張表數據量很大時,不要輕易添加索引,會導致表被鎖死!如果非要添加,那么應該先把數據表進行備份,然后進行空表添加索引。
只能通過ALTER TABLE不能create index
參數說明:
1.添加PRIMARY KEY(主鍵索引):
2.添加UNIQUE(唯一索引) :
3.添加INDEX(普通索引) :
4.添加FULLTEXT(全文索引) :
5.添加多列索引:
新聞名稱:怎么給mysql表加索引,給表加索引的sql
轉載來源:http://vcdvsql.cn/article22/hegpjc.html
成都網站建設公司_創新互聯,為您提供App設計、用戶體驗、品牌網站設計、Google、網站制作、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯