日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > MySql > MySQL數據庫索引使用方法和性能優化

MySQL數據庫索引使用方法和性能優化

來源:程序員人生   發布時間:2014-03-19 11:24:20 閱讀次數:4284次
走向精通MySQL的道路非常的艱難,還好各種關系型數據庫大同小異,足夠讓我從增刪改查上升到高性能數據庫的架構和調優。這期間的各種概念就不絮叨了,我也很難表述的很清楚,昨天寫了個小腳本往我本機MySQL數據庫的某張表里面注入了200萬條數據(Windows7旗艦版/1.66GHz/2G內存/MySQL5.1.50),數據表的結構如下圖所示,屬于一個比較基本的定長表,考慮到我可憐的本本的承受能力,id使用從1開始的自增,title字段為隨機20個標題中的一個,content都是相同的內容,time使用時間戳而非datetime類型,即10位整型數據。

數據庫,mysql

就是這么一個結構極其簡單的表,200萬數量級的復雜查詢將會變的非常緩慢,比如執行下面的SQL語句。

SELECT a.id,FROM_UNIXTIME(a.time)
FROM article AS a
WHERE a.title=‘PHP筆試題和答案——基礎語言方面’

查詢時間基本上需要50-100秒,這個是非常恐怖的,如果加上聯合查詢和其他一些約束條件,數據庫會瘋狂的消耗內存。

數據庫,mysql

如果這時候數據庫里面針對title字段建立了索引,查詢效率將會大幅度提升,如下圖所示。可見對于大型數據庫,建立索引是非常非常重要的一個優化手段(當然還會有很多其他優化這樣的數據庫的方法,但是本文主題所限,暫不討論。),廢話了這么多,以下開始總結MySQL中索引的使用方法和性能優化以及一些注意事項。

數據庫,mysql

索引的概念

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。更通俗的說,數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度。上述SQL語句,在沒有索引的情況下,數據庫會遍歷全部200條數據后選擇符合條件的;而有了相應的索引之后,數據庫會直接在索引中查找符合條件的選項。如果我們把SQL語句換成“SELECT * FROM article WHERE id=2000000”,那么你是希望數據庫按照順序讀取完200萬行數據以后給你結果還是直接在索引中定位呢?上面的兩個圖片鮮明的用時對比已經給出了答案(注:一般數據庫默認都會為主鍵生成索引)。

索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照數據存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對于單行的檢索很快。

索引的類型

1. 普通索引

這是最基本的索引,它沒有任何限制,比如上文中為title字段創建的索引就是一個普通索引。

–直接創建索引
CREATE INDEX indexName ON table(column(length))
–修改表結構的方式添加索引
ALTER tableADD INDEX indexName ON (column(length))
–創建表的時候同時創建索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX indexName (title(length))
)
–刪除索引
DROP INDEX indexName ON table

2. 唯一索引

與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同)。如果是組合索引,則列值的組合必須唯一,創建方法和普通索引類似。

–創建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
–修改表結構
ALTER table ADD UNIQUE indexName ON (column(length))
–創建表的時候直接指定
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE indexName (title(length))
);

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品一区二区三区免费 | 欧美日在线 | 色婷婷麻豆 | 久久久久久久精 | 99re6热只有精品免费观看 | 精品日韩一区二区三区 | aaaa毛片| 嫩草国产| 日韩国产在线 | 男女网站在线观看 | 日韩在线三级 | 久久国产精品一区二区三区 | 国产欧美精品区一区二区三区 | 欧美无乱码久久久免费午夜一区 | 99精品欧美一区二区三区 | 国产午夜精品在线观看 | 99精品在线观看 | 久久久一区二区三区 | 中文字幕亚洲视频 | 欧美一级在线视频 | 狠狠色狠狠色综合人人 | 国产福利视频在线 | 国产激情在线观看 | 久久精品无码一区二区三区 | www99| 国产欧美精品区一区二区三区 | 国产精品国产三级国产三级人妇 | 国产精品66| av片在线看| 免费啪啪 | 中文字幕综合在线 | 国产精品毛片久久 | 久久精品欧美一区二区三区不卡 | 久久久久久久久国产 | 999精品在线 | 国产伦精品一区二区三区照片91 | 成人午夜网址 | 中文字幕区一区二 | 精品久久久久久亚洲综合网 | 国产精品久久久久久久久 | 99精品国产一区二区 |