大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
mysql千万数据加索引卡死关键字?
宝鸡ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
想到了从以下方法进行解决:
1)重写Sql,让查询命中索引
2)增加索引
3)1)或者2)方法之后,再加上一个缓存功能
最快捷的方式肯定是2了,但是本表由于逻辑复杂,时不时又批量录入一些数据,已经有了5个索引了,再加索引,恐怕会导致写入慢的问题,而且加索引可能会引起锁表问题。
于是,我先想用方法1解决,可是由于逻辑有点复杂,查询语句比较复杂,改了很多写法都不理想,最后还是选择了方法2,直接表加索引。
由于对于加索引的一些担忧,于是我在本地先尝试了一下(本地数据和线上数据量基本一致,相差不大),结果没想到还挺快的,对于写入的性能也没多大的影响。加入索引后页面秒开,效果很好。
我们简单建了一张表,如下:
我们建立了两个索引,分别为主键索引id和普通索引product_id
如果我们的where条件中存在or,及时其中带索引,也不会命中索引。这也是为什么尽量使用or的原因
我们通过主键索引查询,可以看见命中了索引:
而我们在where 条件后面加上or之后,就不会命中索引了:
可以看到如果用like查询的话,%在右边会命中索引的,而%在左边则不会。当然这也不是绝对的,当我们使用索引列进行查询的时候,就都会命中索引了:
NOT IN,NOT LIKE,NOT EXTSTS都不会命中索引
1.添加PRIMARY KEY(主键索引):
2.添加UNIQUE(唯一索引) :
3.添加INDEX(普通索引) :
4.添加FULLTEXT(全文索引) :
5.添加多列索引:
兄弟,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索引目的是为了使查询更快,区分度小的时候不如全表扫描。